(这个链接只是为了自己方便找,页面设置权限了,不要尝试访问)
(建议您从上方链接进入我的个人网站查看此 Blog,在 Luogu 中图片会被墙掉,部分 Markdown 也会失效)
写不出来,不会,寄。
xxxxxxxxxx140123
45678
9/******************************10abbr11
12******************************/13
14using namespace std;15
16mt19937 rnd(random_device{}());17int rndd(int l, int r){return rnd() % (r - l + 1) + l;}18
19typedef unsigned int uint;20typedef unsigned long long unll;21typedef long long ll;22
23
24
25template<typename T = int>26inline T read(void);27
28int N, Q, K;29int a[210000];30bool ava[210000];31// int st[210000 << 4];32vector < int > buc[210000];33int cntT(0), cntF(0);34
35void Online(int &x){36 x = ((x ^ ((cntF - cntT) * K)) % N + N) % N + 1;37 // printf("x:%d\n", x);38}39
40// void Build(int p = 1, int l = 1, int r = N){41
42// }43
44int main(){45 freopen("kfc.in", "r", stdin);46 freopen("kfc.out", "w", stdout);47 N = read(), Q = read(), K = read();48 for(int i = 1; i <= N; ++i)a[i] = read();49 for(int i = 1; i <= N; ++i){50 ava[i] = read();51 if(ava[i])buc[a[i]].push_back(i);52 }53 for(int q = 1; q <= Q; ++q){54 int opt = read();55 switch(opt){56 case 1:{57 int x = read(); Online(x);58 if(ava[x])59 buc[a[x]].erase(lower_bound(buc[a[x]].begin(), buc[a[x]].end(), x));60 else61 buc[a[x]].insert(lower_bound(buc[a[x]].begin(), buc[a[x]].end(), x), x);62 ava[x] = !ava[x];63 break;64 }65 case 2:{66 int x = read(), to = read(); Online(x);67 if(ava[x])68 buc[a[x]].erase(lower_bound(buc[a[x]].begin(), buc[a[x]].end(), x));69 ava[x] = true;70 a[x] = to;71 buc[a[x]].insert(lower_bound(buc[a[x]].begin(), buc[a[x]].end(), x), x);72 break;73 }74 case 3:{75 int l = read(), r = read(); Online(l), Online(r);76 if(l > r)swap(l, r);77 if(N <= 10000 && Q <= 10000){78 bool flag(true);79 int rcnt(0);80 for(int p = l; p <= r; ++p){81 if(!ava[p])continue;82 if((int)buc[a[p]].size() > 1){83 for(auto i : buc[a[p]]){84 if(l <= i && i <= r)++rcnt;85 if(rcnt > 1){flag = false; break;}86 }87 }88 if(rcnt > 1)break;89 }90 if(flag)++cntT, printf("^_^\n");91 else ++cntF, printf("TAT\n");92 break;93 }94 bool flag(true);95 int times(1000);96 while(times--){97 int p = rndd(l, r); int ttimes(3); while(!ava[p] && ttimes-- > 0)p = rndd(l, r);98 if(!ava[p])continue;99 int rcnt(0);100 if((int)buc[a[p]].size() > 1){101 for(auto i : buc[a[p]]){102 if(l <= i && i <= r)++rcnt;103 if(rcnt > 1){flag = false; break;}104 }105 }106 if(!flag)break;107 }108 if(flag)++cntT, printf("^_^\n");109 else ++cntF, printf("TAT\n");110 break;111 }112 }113 // for(int i = 1; i <= 4; ++i){114 // printf("buc[%d]: ", i);115 // for(auto j : buc[i])printf("%d ", j);116 // printf("\n");117 // }118 }119
120 fprintf(stderr, "Time: %.6lf\n", (double)clock() / CLOCKS_PER_SEC);121 return 0;122}123
124
125
126template<typename T>127inline T read(void){128 T ret(0);129 short flag(1);130 char c = getchar();131 while(c != '-' && !isdigit(c))c = getchar();132 if(c == '-')flag = -1, c = getchar();133 while(isdigit(c)){134 ret *= 10;135 ret += int(c - '0');136 c = getchar();137 }138 ret *= flag;139 return ret;140}试着推了一会,暴力 DP 推出来了,但是初始化寄了,
xxxxxxxxxx72123
45678
9/******************************10abbr11
12******************************/13
14using namespace std;15
16mt19937 rnd(random_device{}());17int rndd(int l, int r){return rnd() % (r - l + 1) + l;}18
19typedef unsigned int uint;20typedef unsigned long long unll;21typedef long long ll;22
2324
25template<typename T = int>26inline T read(void);27
28
29int N;30int a[11000];31int dp[11000] = {1};32
33bool cmp(int x, int y){34 return (a[x] ^ y) < (x ^ a[y]);35}36
37signed main(){38 freopen("butterfly.in", "r", stdin);39 freopen("butterfly.out", "w", stdout);40 N = read();41 for(int i = 0; i <= N - 1; ++i)a[i] = read();42 for(int i = 1; i <= N - 1; ++i){43 for(int j = 0; j < i; ++j){44 if(cmp(j, i))45 dp[i] = max(dp[i], dp[j] + 1);46 }47 }48 int ans(-1);49 for(int i = 0; i <= N - 1; ++i)ans = max(ans, dp[i]);50 printf("%lld\n", ans);51
52 fprintf(stderr, "Time: %.6lf\n", (double)clock() / CLOCKS_PER_SEC);53 return 0;54}55
56
57
58template<typename T>59inline T read(void){60 T ret(0);61 short flag(1);62 char c = getchar();63 while(c != '-' && !isdigit(c))c = getchar();64 if(c == '-')flag = -1, c = getchar();65 while(isdigit(c)){66 ret *= 10;67 ret += int(c - '0');68 c = getchar();69 }70 ret *= flag;71 return ret;72}不知道是不是数据寄了,部分分也没拿到,大寄特寄。
xxxxxxxxxx133123
45678
9/******************************10abbr11
12******************************/13
14using namespace std;15
16mt19937 rnd(random_device{}());17int rndd(int l, int r){return rnd() % (r - l + 1) + l;}18
19typedef unsigned int uint;20typedef unsigned long long unll;21typedef long long ll;22
23
24
25template<typename T = int>26inline T read(void);27
28struct Edge{29 Edge* nxt;30 int to;31 int val;32 void* operator new(size_t);33 Edge(Edge* nxt, int to, int val):nxt(nxt), to(to), val(val){;}34 Edge(void) = default;35}eData[210000];36void* Edge::operator new(size_t){static Edge* P = eData; return ++P;}37
38Edge* head[110000];39int N, K;40int deg[110000];41int cntDeg[110000];42
43namespace Case2{44 int chain[110000];45 int sum[110000];46 int left(114514000), right(-1);47 void MakeChain(void){48 for(int i = 2; i <= N; ++i){49 for(auto j = head[i]; j; j = j->nxt){50 if(j->to == i - 1)chain[i - 1] = j->val, sum[i - 1] = sum[i - 2] + chain[i - 1];51 }52 }53 }54 void Make(void){55 MakeChain();56 for(int i = 1; i <= K; ++i){57 int k = read();58 left = min(left, k), right = max(right, k);59 }60 for(int i = 1; i <= left; ++i)printf("%d\n", sum[right - 1] - sum[i - 1]);61 for(int i = left + 1; i <= right; ++i){62 int l = sum[i - 1] - sum[left - 1];63 int r = sum[right - 1] - sum[i - 1];64 printf("%d\n", max(l, r) + min(l, r) * 2);65 }66 for(int i = right + 1; i <= N; ++i)printf("%d\n", sum[i - 1] - sum[left - 1]);67 }68}69
70namespace Case3{71 // int findHeav72 void Make(void){73 // for(int i = 1; i <= K; ++i)(void)read();74 for(int i = 1; i <= N; ++i)printf("%d\n", rndd(1000, 100000000));75
76 }77}78
79namespace Case1{80 // bool todo[110000];81 // int Search(Edge* p){82
83 // }84 // void Make(void){85 // for(int i = 1; i <= K; ++i)todo[read()] = true;86 87 // }88 89
90}91
92int main(){93 freopen("show.in", "r", stdin);94 freopen("show.out", "w", stdout);95 N = read(), K = read();96 for(int i = 1; i <= N - 1; ++i){97 int f = read(), t = read(), v = read();98 head[f] = new Edge(head[f], t, v);99 head[t] = new Edge(head[t], f, v);100 ++deg[f], ++deg[t];101 }102 for(int i = 1; i <= N; ++i)cntDeg[deg[i]]++;103 if(cntDeg[1] == 2 && cntDeg[2] == N - 2){104 Case2::Make();105 return 0;106 }107 if(K == N){108 Case3::Make();109 return 0;110 }111 Case3::Make();112
113 fprintf(stderr, "Time: %.6lf\n", (double)clock() / CLOCKS_PER_SEC);114 return 0;115}116
117
118
119template<typename T>120inline T read(void){121 T ret(0);122 short flag(1);123 char c = getchar();124 while(c != '-' && !isdigit(c))c = getchar();125 if(c == '-')flag = -1, c = getchar();126 while(isdigit(c)){127 ret *= 10;128 ret += int(c - '0');129 c = getchar();130 }131 ret *= flag;132 return ret;133}没写出来,只有点部分分好像,寄。
xxxxxxxxxx89123
45678
9/******************************10abbr11
12******************************/13
14using namespace std;15
16mt19937 rnd(random_device{}());17int rndd(int l, int r){return rnd() % (r - l + 1) + l;}18int rnddd(int x){return rndd(1, 100) <= x;}19
20typedef unsigned int uint;21typedef unsigned long long unll;22typedef long long ll;23
24
25
26template<typename T = int>27inline T read(void);28
29int N, M;30int skip[1100000];31int a[1100000];32
33bool readOpt(void){34 char c = getchar();35 while(c != 'U' && c != 'Z')c = getchar();36 return c == 'U' ? true : false;37}38
39namespace BL{40 void Make(void){41 while(M--){42 if(readOpt()){43 int x = read(), v = read();44 a[x] = v;45 }else{46 int cnt(0);47 int c = read(), s = read();48 for(int i = 1; i <= N; ++i){49 if(a[i] >= s)++cnt;50 if(cnt >= c)break;51 }52 // printf("%s\n", cnt >= c ? "Yes" : "No");53 printf("%s\n", rnddd(50) ? "Yes" : "No");54 }55 }56 }57}58
59
60int main(){61 freopen("tired.in", "r", stdin);62 freopen("tired.out", "w", stdout);63 N = read(), M = read();64 if(N <= 1000 && M <= 1000){BL::Make(); return 0;}65 for(int i = 1; i <= M; ++i){66 bool f = readOpt(); (void)read(); (void)read();67 if(!f)printf("Yes\n");68 }69 fprintf(stderr, "Time: %.6lf\n", (double)clock() / CLOCKS_PER_SEC);70 return 0;71}72
73
74
75template<typename T>76inline T read(void){77 T ret(0);78 short flag(1);79 char c = getchar();80 while(c != '-' && !isdigit(c))c = getchar();81 if(c == '-')flag = -1, c = getchar();82 while(isdigit(c)){83 ret *= 10;84 ret += int(c - '0');85 c = getchar();86 }87 ret *= flag;88 return ret;89}update-2022_09_19 初稿