UOJ73 WC2015 未來程式

2022-05-25 14:24:09 字數 4746 閱讀 3280

題目描述:給出輸入和暴力程式,求輸出。共10個測試點。

測試點1:

輸入\(a,b,c\),求\(a\times b \ \mathrm \ c\)

\(a,b,c\)屬於long long範圍。

使用龜速乘或者快速乘。

#include#define rint register int

using namespace std;

typedef long long ll;

ll a, b, mod;

inline void upd(ll &a, ll b)

inline ll mul(ll a, ll b)

return res;

}int main()

}

測試點2:發現它就是個線性遞推,暴力矩陣快速冪即可。

#include#define rint register int

#define int unsigned

using namespace std;

typedef long long ll;

const int n = 3;

ll n;

int mod;

inline void upd(int &a, int b)

inline int add(int a, int b)

inline int sub(int a, int b)

struct matrix

inline matrix operator * (const matrix &o) const

} a, b, c;

inline matrix kasumi(matrix a, ll n)

return res;

}signed main()

}

測試點3:

輸入\(n=10^\),求\(\sum_^ni^k \ \mathrm \ 2^(k=0,1,2,3,4)\)

\[\begin

\sum_^ni^0&=n \\

\sum_^ni^1&=\frac \\

\sum_^ni^2&=\frac \\

\sum_^ni^3&=(\frac)^2 \\

\sum_^ni^4&=\frac

\end

\]首先用__int128求出\(\frac\),然後求出\(\frac\)和\(\frac\),直接計算。

#include#define rint register int

using namespace std;

typedef unsigned long long ll;

typedef __int128 lll;

ll n, m;

inline ll kasumi(ll a, ll b)

return res;

}ll inv3 = kasumi(3, (1ull << 63) - 1);

ll inv15 = kasumi(15, (1ull << 63) - 1);

int main()

測試點4:

輸入\(n\times m\)的隨機01矩陣,有兩個問題:

求\(1\)的個數\(ans\),輸出\(\frac\)

對於每個\(1\),求離它最近的\(0\)的距離之和(曼哈頓距離)

\(1\le n,m\le 1000\)

看上面的粗體字。

#include const int n = 5000, inf = 0x3f3f3f3f;

int n, m, type;

bool data[n + 11][n + 11];

int seed;

int next_rand()

void generate_input()

long long count1()

int abs_int(int x)

inline int max(int a, int b)

long long count2()

if(flag)

}return ans;

}int main()

return 0;

}

測試點5:

輸入\(n\times m\)的隨機01矩陣,求有多少個全1子矩陣。

\(1\le n,m\le 5000\)

是不是覺得很熟悉?

#include#define rint register int

using namespace std;

typedef long long ll;

const int n = 5003;

int seed;

int next_rand()

int n, a[n][n], pre[n][n], stk[n], top;

ll ans1;

int main()

stk[++ top] = j;

ans1 += ans;

} }printf("%lld\n", ans1);

}}

測試點6:

輸入\(n,a,b,c\),設\(f_0=0,f_n=(af_^2+b) \ \mathrm \ 2^ \ \mathrm \ c\),求\(f_n\)

\(n,a,b,c\)在long long範圍內。

直接講做法了:首先從\(s\)出發,然後設兩個指標\(x,y\),乙個快指標和乙個慢指標,快指標每次走\(2\)步,慢指標每次走\(1\)步,然後它們在\(m\)點相遇。

計算環長:令其中乙個指標一直走,記錄步數。

計算環起點:令其中乙個指標在\(m\),另乙個在\(s\),然後以同樣的速度走。

然而如果你跑這東西的話會耗死你。【我都寫完上面的東西了它乙個資料點都沒跑出來】

需要用乙個brent判環演算法。這東西的過程是這樣的。

讓\(x\)一直跑,遇到\(y\)的時候退出,\(cnt\)環長。

否則讓\(step=step\times 2,y=x,cnt=0\)

知道環長之後,令\(x=y=0\),然後讓\(x\)跑\(cnt\)遍,然後再讓\(x,y\)一起跑,相遇的地方就是環起點。

然後從環起點開始跑就可以了。

#include#define rint register int

using namespace std;

typedef unsigned long long ll;

const ll n = 1e10;

ll n, a, b, c;

inline ll nxt(ll x)

int main()

} x = y = 0;

while(cnt < s) x = nxt(x), ++ cnt;

cnt = 1;

while(x != y) x = nxt(x), y = nxt(y), ++ cnt;

r = (n - cnt) % s + 1;

while(r --) x = nxt(x);

printf("%llu\n", x);

}}

測試點7:

\(16*16\)的數獨。

是不是覺得很熟悉?

#include#include#define rint register int

using namespace std;

const int n = 1000003, n = 4096, m = 1024;

int a[17][17], r[n], u[n], l[n], d[n], s[n], col[n], row[n], h[n], ans[n], cnt;

inline void init()

l[0] = m; r[m] = 0;

memset(h, -1, sizeof h);

memset(s, 0, sizeof s);

memset(col, 0, sizeof col);

memset(row, 0, sizeof row);

memset(ans, 0, sizeof ans);

cnt = m + 1;

}inline void insert(int x, int y)

++ cnt;

}inline void remove(int y)

}inline void resume(int y)

r[l[y]] = l[r[y]] = y;

}inline bool dance(int dep)

return true;

} int c = r[0];

for(rint i = r[0];i;i = r[i]) if(s[i] < s[c]) c = i;

remove(c);

for(rint i = d[c];i != c;i = d[i])

resume(c);

return false;

}int main()

}dance(0);

for(rint l = 0;l < k;l ++)

}}

測試點8,9,10:咕

uoj 58 WC2013 糖果公園

寒假裡lbn大爺講離線演算法時就講過了。然而現在才明白該怎麼做。這題就是樹上帶修莫隊,帶修莫隊就是再加一維時間,然後分塊size n 2 3 時間複雜度o n 1.67 樹上莫隊可以先求出括號序列,若x為y祖先,則兩點間的路徑為l x l y 否則就是r x l y lca。沒了。include i...

UOJ 349 WC2018 即時戰略

題目鏈結 一開始已知一號點。每次可以選定乙個已知點和乙個未知點,然後互動庫會返回從已知點出發到達未知點路徑上的第二個點。要求在有限步之內知道每乙個點。次數要求 鏈的情況要求 o n o n o n 其餘是 o n logn o nlogn o nlog n 首先是鏈的情況,記錄當前左右端點不斷往後探...

UOJ 348 WC2018 州區劃分

第一次知道子集卷積可以自己卷自己。這是一道子集卷積模板題。設 sum s 表示點集 s 的點權和。設 f s 表示對點集 s 進行州區劃分得到的答案,定義 g s 在點集 s 合法時為 sum s p 不合法時為 0 則 f s frac sum f t g s t 這東西是個子集卷積的形式。但是在...