Submission #1185445

#TimeUsernameProblemLanguageResultExecution timeMemory
1185445ansoriMatching (CEOI11_mat)C++20
100 / 100
165 ms39508 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC optimize("my solution") //#define int long long #define ll long long #define nlp nullptr #define btc __builtin_popcount #define sht int_fast16_t #define ld double #define fi first #define se second using namespace std; const int N = 3e5 + 5 , K = 8 , B = 369; const int md = 998244353; const int inf = 1e9; const long double eps = 1e-8; const bool stress = false; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); bool chk(vector<pair<int , int>> &cock , vector<int> &t , int ps , int sf){ if(sf == cock.size()) return false; if(cock[sf].fi != -1 and t[ps] > t[ps - (sf - cock[sf].fi)]) return false; if(cock[sf].se != -1 and t[ps] < t[ps - (sf - cock[sf].se)]) return false; return true; } vector<int> kmp(vector<int> pat , vector<int> txt){ int n = pat.size() , m = txt.size() , suf[n + 1] = {} , sf = 0; // for(int i = 0;i < n; ++ i) cout << pat[i] << ' '; // cout << '\n'; vector<pair<int , int>> fuck(n); int pr[n + 1] , nx[n + 1] , ps[n + 1]; for(int i = 0;i < n; ++ i){ ps[pat[i]] = i; pr[i] = pat[i] - 1; nx[i] = pat[i] + 1; } for(int i = n - 1;i >= 0; -- i){ if(pr[i] == -1) fuck[i].se = -1; else fuck[i].se = ps[pr[i]]; if(nx[i] == n) fuck[i].fi = -1; else fuck[i].fi = ps[nx[i]]; if(pr[i] != -1) nx[ps[pr[i]]] = nx[i]; if(nx[i] != n) pr[ps[nx[i]]] = pr[i]; //cout << fuck[i].se << ' ' << fuck[i].se << '\n'; } vector<int> ans; for(int i = 1;i < n; ++ i){ while(sf and ! chk(fuck , pat , i , sf)) sf = suf[sf - 1]; if(chk(fuck , pat , i , sf)) sf ++; suf[i] = sf; //cout << sf << ' '; } sf = 0; for(int i = 0;i < m; ++ i){ while(sf and ! chk(fuck , txt , i , sf)) sf = suf[sf - 1]; if(chk(fuck , txt , i , sf)) sf ++; if(sf == n) ans.push_back(i - n + 1); } return ans; } void solve(){ int n , m; cin >> n >> m; vector<int> pat(n) , txt(m); for(int i = 0;i < n; ++ i){ int s; cin >> s; pat[s - 1] = i; } for(int i = 0;i < m; ++ i) cin >> txt[i]; vector<int> ans = kmp(pat , txt); cout << ans.size() << '\n'; for(auto to : ans) cout << to + 1 << ' '; } main() { //217 //freopen("seating.in", "r", stdin) , freopen("seating.out" , "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0),cout.tie(0); int T = 1; //cin >> T; while(T --) { solve(); cout << '\n'; } }

Compilation message (stderr)

mat.cpp:3:35: warning: bad option '-fmy solution' to pragma 'optimize' [-Wpragmas]
    3 | #pragma GCC optimize("my solution")
      |                                   ^
mat.cpp:19:74: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
   19 | bool chk(vector<pair<int , int>> &cock , vector<int> &t , int ps , int sf){
      |                                                                          ^
mat.cpp:25:50: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
   25 | vector<int> kmp(vector<int> pat , vector<int> txt){
      |                                                  ^
mat.cpp:60:12: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
   60 | void solve(){
      |            ^
mat.cpp:74:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   74 | main()
      | ^~~~
mat.cpp:74:6: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
   74 | main()
      |      ^
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...