Submission #1149491

#TimeUsernameProblemLanguageResultExecution timeMemory
1149491modwweChameleon's Love (JOI20_chameleon)C++20
4 / 100
18 ms532 KiB
//#include "gap.h" #include "chameleon.h" #pragma GCC optimize("Ofast,unroll-loops") #include<bits/stdc++.h> //#define int long long #define ll long long #define down cout<<'\n'; #define debug cout<<" cucuucucuuu",down #define modwwe int t;cin>>t; while(t--) #define bit(i,j) (i>>j&1) #define sobit(a) __builtin_popcountll(a) #define task2 "ftree" #define task "test" #define fin(x) freopen(x".inp","r",stdin) #define fou(x) freopen(x".out","w",stdout) #define pb push_back #define mask(k) (1<<k) #define checktime cerr << (double)clock() / CLOCKS_PER_SEC * 1000 << " ms"; using namespace std; #define getchar_unlocked getchar mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); int rand(int l,int r) { return uniform_int_distribution<int>(l,r)(rd); } void phongbeo(); const int inf = 1e16; const ll mod2 = 1e9+7; const ll base=67; int n, m, s1, s2, s4, s3, sf, k, s5, s6, mx, s7, s8, s9, mx2, res, dem2 = 0, dem = 0, s33, dem3, dem4, mid, l2, r2, center; int i, s10, s12,k1,k2,k3,s11,lim,w,l,r ; int kk; int t; int el = 19;/* main() { if(fopen(task2".inp","r")) { fin(task2); fou(task2); } if(fopen(task".inp","r")) { fin(task); fou(task); } ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); /// cin>>s1; //int t;cin>>t; while(t--) phongbeo(); // checktime } const int Q_MAX = 20'000; const int N_MAX = 500; int N; int Y[N_MAX * 2 + 1], C[N_MAX * 2 + 1], L[N_MAX * 2 + 1]; int query_count = 0; int answer_count = 0; bool finishes[N_MAX * 2 + 1]; void WrongAnswer(int code) { printf("Wrong Answer [%d]\n", code); exit(0); }*/ vector<int> v[1001]; bool vis[1001]; vector<int> ke[1001]; bool use[1001]; void dfs(int x,int y) { vis[x]=1; v[y].pb(x); for(auto f:ke[x]) if(!vis[f]) dfs(f,1-y); }/* int Query(const std::vector<int> &p) { if (++query_count > Q_MAX) WrongAnswer(3); bool presents[N_MAX * 2 + 1]; for (int i = 1; i <= N * 2; ++i) presents[i] = false; for (const int k : p) { if (k <= 0 || k > N * 2) WrongAnswer(1); if (presents[k]) WrongAnswer(2); presents[k] = true; } bool colors[N_MAX + 1]; for (int j = 1; j <= N; ++j) colors[j] = false; int color_count = 0; for (int i = 1; i <= N * 2; ++i) { if (!presents[i]) continue; const int color = presents[L[i]] ? C[L[i]] : C[i]; if (!colors[color]) { ++color_count; colors[color] = true; } } return color_count; } void Answer(int a, int b) { ++answer_count; if (a <= 0 || a > N * 2) WrongAnswer(4); if (b <= 0 || b > N * 2) WrongAnswer(4); if (finishes[a]) WrongAnswer(5); finishes[a] = true; if (finishes[b]) WrongAnswer(5); finishes[b] = true; if (C[a] != C[b]) WrongAnswer(6); }*/ bool check(int x,int y) { vector<int> hihi; for(int i=1; i<=2*n; i++) if(i!=x&&i!=y) hihi.pb(i); return (Query(hihi)!=n); } void Solve(int N) { n=N; ///lx=i or li=x or ci=cx for(int i=2; i<=2*n; i++) { memset(vis,0,sizeof vis); for(int j=1; j<i; j++) if(!vis[j])dfs(j,0); for(int j=0; j<2; j++) { while(true) { v[j].pb(i); if(Query(v[j])==v[j].size()) break; v[j].pop_back(); l=1; r=v[j].size()-1; while(l<=r) { int mid=l+r>>1; vector<int>haha; for(int f=mid; f<v[j].size(); f++) haha.pb(v[j][f]); haha.pb(i); if(Query(haha)==haha.size())r=mid-1; else l=mid+1; } s2=v[j][r]; ke[s2].pb(i); ke[i].pb(s2); reverse(v[j].begin(),v[j].end()); while(true) { if(v[j].back()==s2) { v[j].pop_back(); break; } v[j].pop_back(); } } v[j].clear(); } } for(int i=1; i<=n*2; i++) for(auto x:ke[i]) if(x>i&&!use[x]) if(check(x,i)) Answer(x,i),use[x]=1; } /* void phongbeo() { if (scanf("%d", &N) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } for (int i = 1; i <= N * 2; ++i) { if (scanf("%d", &Y[i]) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } } for (int i = 1; i <= N * 2; ++i) { if (scanf("%d", &C[i]) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } } for (int i = 1; i <= N * 2; ++i) { if (scanf("%d", &L[i]) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } } for (int i = 1; i <= N * 2; ++i) finishes[i] = false; Solve(N); if (answer_count != N) WrongAnswer(7); printf("Accepted: %d\n", query_count); } */

Compilation message (stderr)

chameleon.cpp:27:17: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+16' to '2147483647' [-Woverflow]
   27 | const int inf = 1e16;
      |                 ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...