UOJ Round 1 數論 DP 排列

2021-09-07 11:13:41 字數 1815 閱讀 5772

難度很良心啊!

做出了前兩題,第三題看到仙人掌就嚇哭了。

就是求\[ \sum_^n a_i - (x-1)\sum_^n\lfloor \frac \rfloor \]

最小值。

調和級數\(o(nlogn)\)

#include #include #include #include #include using namespace std;

typedef long long ll;

const int n = 2e6+5, mo = 998244353;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}int n, a[n], m, s[n];

ll ans = 1e18, sum = 0;

ll cal(int x)

int main()

題意:

n序列\(a_i\),對於乙個排列,x按順序分別對他們取模,最後得到y,求\(\mid x-y\mid\)最小值以及對應的排列方案數。

題解:看到排列,當然想到按某種順序乙個個插入

從小到大插入,\(f[i][j]\)表示前i個一開始數是j,最後得到的最大值和方案數

第i個數要產生影響只能放在開頭

#include #include #include #include #include using namespace std;

typedef long long ll;

#define fir first

#define sec second

const int n = 1005, m = 5005, mo = 998244353;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}int n, x, a[n];

pairf[n][m];

int main()

printf("%d\n%d", f[n][x].fir, f[n][x].sec);

}

20分暴力!

#include #include #include #include #include using namespace std;

typedef long long ll;

#define fir first

#define sec second

const int n = 1005, mo = 998244353;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}int n, m, u, v;

struct edge e[n<<2];

int cnt, h[n];

inline void ins(int u, int v) ; h[u] = cnt;

e[++cnt] = (edge) ; h[v] = cnt;

}bool vis[n];

int ans[n];

void dfs(int u, int l)

int main() {

freopen("in", "r", stdin);

n = read(); m = read();

for(int i=1; i<=m; i++) ins(read(), read());

dfs(1, 0);

for(int i=1; i

(數論1)質因數

質因數 素因數或質因子 在數論裡是指能整除給定正整數的質數 質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。正整數的因數分解可將正整數表示為一連串的質因子相乘,質因子如重複可以用指數表示 除了1以外,兩個沒有其他共同質因子的正整數稱為 互質。因為1沒有質因子,1與任何正整數 包括1本...

數論練習1題解A

先貼題 此題有兩個思路 法1 運用費馬定理和同餘 則結果同餘與2 k,k為對n求1e9 6的模 此處可一位位讀求 也可 高精度 備註 以上均要使用快速冪 如下 include includeusing namespace std char ch 100002 long long power int,...

方程(1)(數論 組合數)

description 求關於x1,x2,xn 的方程 x1 x2 xn k 的非負整數解的個數。input 僅一行,包含 個正整數n,k。output 乙個整數,表示方程不同解的個數,這個數可能很大,你只需輸出mod 20080814的結果。分析 這其實是乙個組合數的模型 有n種元素,每種元素可不...