제출 #1141115

#제출 시각아이디문제언어결과실행 시간메모리
1141115b0udyXOR (IZhO12_xor)C++20
0 / 100
2 ms320 KiB
#include <bits/stdc++.h> #include <numeric> #define Body ios_base::sync_with_stdio(false);cin.tie(NULL); #define files freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #define clo cout << "Time execute: " << clock()/ (double)CLOCKS_PER_SEC << " sec" << endl; #define all(ele) ele.begin(), ele.end() #define fo(i , n) for (long long int i =0 ; i < n ; i++) #define ll long long int #define ull unsigned long long #define MX INT_MAX #define MN INT_MIN #define LMX LONG_LONG_MAX #define LMN LONG_LONG_MIN #define i128 __int128 #define yes cout << "YES"; #define no cout << "NO"; #define X first #define Y second #define pii pair<int,int> #define pll pair<ll,ll> using namespace std; const int N = 1e5+7, mod = 1e9+7 ; int k ; struct trie { trie *ls[2]; int cnt; int front; trie() { memset(ls, 0, sizeof(ls)); cnt = 0; front = MX ; } void insert(ll x , int index) { trie *root = this; for (int j = 30; ~j; j--) { int bit = (x >> j) & 1; if (root->ls[bit] == nullptr) root->ls[bit] = new trie(); root = root->ls[bit]; root->cnt++; root->front = min(root->front , index); } } ll XOR(ll x) { trie *root = this; return calc(30 , x , 0 , root); } int calc(int j , int x , int cas , trie* root){ if (root == nullptr){ return N ; } if (cas){ return root->front; } if (j == -1) return root->front; int res = N ; int bit = (x >> j)&1 , bitk = (k >> j)&1 ; if (cas == 0){ // care if ((bit^bitk) == 0){ if (bit) res = calc(j-1 , x , 0 , root->ls[0]); else res = min(calc(j-1 , x , 0 , root->ls[0]) , calc(j-1 , x , 1 , root->ls[1])); }else if (bit){ res = min(calc(j-1 , x , 1 , root->ls[0]) , calc(j-1 , x , 0 , root->ls[bit])); }else{ // bitk == 1 res = calc(j-1 , x , 0 , root->ls[1]); } }else{ // not care res = min(calc(j-1 , x , cas , root->ls[0]) , calc(j-1 , x , cas , root->ls[1])); } return res ; } }; void burn() { int n ; cin >> n >> k ; int arr[n+1]{}; fo(i , n){ cin >> arr[i+1]; arr[i+1] ^= arr[i]; } trie trie; int idx = 0 , ln = 0 ; fo(i , n+1){ trie.insert(arr[i] , i); if (i){ int st = trie.XOR(arr[i]); if (i-st >= ln) idx = st+1 , ln = i-st ; // cout << trie.XOR(arr[i]) << ' '; } } cout << idx << ' ' << ln ; } int main() { Body freopen("c.in", "r", stdin); freopen("c.out", "w", stdout); int cas = 1 ; // cin >> cas ; while (cas--) { burn(); cout << endl; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

xor.cpp: In function 'int main()':
xor.cpp:106:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  106 |     freopen("c.in", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~
xor.cpp:107:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  107 |     freopen("c.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...