Submission #753853

#TimeUsernameProblemLanguageResultExecution timeMemory
753853minhcoolLast supper (IOI12_supper)C++17
100 / 100
184 ms14320 KiB
#include "advisor.h" #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; //#define int long long #define fi first #define se second #define pb push_back //#define mp make_pair typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 3e5 + 5; const int oo = 1e9 + 7, mod = 1e9 + 7; /* mt19937 rng(1); int rnd(int l, int r){ int temp = rng() % (r - l + 1); return abs(temp) + l; }*/ //set<ii> se; map<int, int> mp; int nxt[N]; int c[N]; bool cook[N]; int in[N]; int n, k, cur[N]; void ComputeAdvice(int *C, int N, int K, int M){ n = N, k = K; for(int i = 0; i < k; i++) c[i] = i; for(int i = k; i < n + k; i++) c[i] = C[i - k]; for(int i = n + k - 1; i >= 0; i--){ if(mp.find(c[i]) == mp.end()) nxt[i] = oo; else nxt[i] = mp[c[i]]; mp[c[i]] = i; } set<ii> se; for(int i = 0; i < n; i++) in[i] = -1; for(int i = 0; i < n + k; i++){ if(in[c[i]] >= 0){ se.erase({in[c[i]], c[i]}); in[c[i]] = nxt[i]; cur[c[i]] = i; se.insert({in[c[i]], c[i]}); } else{ if(se.size() == k){ // cout << i << " " << (*se.rbegin()).fi << " " << (*se.rbegin()).se << " " << cur[(*se.rbegin()).se] << "\n"; int temp = (*se.rbegin()).se; cook[cur[temp]] = 1; in[temp] = -1; se.erase((*se.rbegin())); } in[c[i]] = nxt[i]; cur[c[i]] = i; se.insert({in[c[i]], c[i]}); } } for(int i = 0; i < n + k; i++){ // if(i <= 20) cout << i << " " << cook[i] << "\n"; WriteAdvice(cook[i]); } }
#include "assistant.h" #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; //#define int long long #define fi first #define se second #define pb push_back #define mp make_pair typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 3e5 + 5; const int oo = 1e18 + 7, mod = 1e9 + 7; mt19937 rng(1); int rnd(int l, int r){ int temp = rng() % (r - l + 1); return abs(temp) + l; } void Assist(unsigned char *A, int N, int K, int R){ int n = N, k = K; set<int> cooking; set<int> ins; //cout << n + k << "\n"; //for(int i = 0; i < n; i++) in[i] = -1; for(int i = 0; i < n + k; i++){ int x; if(i < k) x = i; else x = GetRequest(); //cout << "HE " << x << "\n"; if(ins.find(x) != ins.end()){ // cooking.erase(x); if(A[i]) cooking.insert(x); } else{ // cout << x << "\n"; // cout << "HOHOHO\n"; if(ins.size() == k){ // assert(cooking.size()); int temp = (*cooking.begin()); cooking.erase(temp); ins.erase(temp); PutBack(temp); } // cout << "HOHOHO2\n"; if(A[i]) cooking.insert(x); ins.insert(x); // cout << "HO\n"; } // cout << i << " " << ins.size() << " " << cooking.size() << "\n"; } }

Compilation message (stderr)

advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:61:17: warning: comparison of integer expressions of different signedness: 'std::set<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   61 |    if(se.size() == k){
      |                 ^

assistant.cpp:19:21: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   19 | const int oo = 1e18 + 7, mod = 1e9 + 7;
      |                ~~~~~^~~
assistant.cpp: In function 'void Assist(unsigned char*, int, int, int)':
assistant.cpp:47:18: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   47 |    if(ins.size() == k){
      |       ~~~~~~~~~~~^~~~
#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...