Submission #1082704

#TimeUsernameProblemLanguageResultExecution timeMemory
1082704tte0Flip it and Stick it (CCO23_day2problem1)C++17
13 / 25
9 ms9812 KiB
/* Author: Teoman Ata Korkmaz */ #pragma GCC optimize("O3,fast-math,unroll-loops,no-stack-protector") #include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #define int ll #define ff first #define ss second #define endl '\n' #define spc ' ' #define pb push_back #define e2(x) (1LL<<(x)) #define lg(x) (__lg(x)) #define gcd(x,y) __gcd(x,y) #define lcm(x,y) ((x/gcd(x,y))*y) #define smrt(i) (double(sqrt(8*(i)+1)-1)/2) #define ssum(x) ((x)*((x)+1)/2) #define isint(x) (ceil((x))==floor((x))) #define no cout<<"NO"<<endl #define yes cout<<"YES"<<endl #define cendl cout<<endl #define mset(x,y) memset(x,y,sizeof(x)) #define popcnt(x) __builtin_popcountll(x) #define clz(x) __builtin_clz(x) #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define clock() uint64_t(chrono::high_resolution_clock::now().time_since_epoch().count()) #define compress(x) sort(all(x));x.resize(unique(all(x))-x.begin()) #define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cerr.tie(NULL);cout<<fixed<<setprecision(0);cerr<<fixed<<setprecision(0) #define fileio freopen("out.txt","w",stdout);freopen("in.txt","r",stdin) #define usacoio(s) freopen((s + str(".in")).c_str(), "r", stdin);freopen((s + str(".out")).c_str(), "w", stdout) #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> using namespace std; //using namespace __gnu_pbds; typedef int_fast32_t i32; typedef int_fast64_t ll; typedef long double ldouble; typedef string str; typedef pair<int,int> ii; typedef pair<int,ii> iii; typedef pair<ii,ii> iiii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<iii> viii; typedef vector<vi> vvi; typedef vector<vvi> vvvi; typedef vector<pair<char,int>> vci; typedef vector<str> vstr; typedef map<int,int> mii; typedef map<char,int> mci; typedef map<str,int> msi; typedef map<int,vi> miv; typedef unordered_map<int,int> umii; typedef unordered_map<char,int> umci; typedef unordered_map<str,int> umsi; typedef unordered_map<int,vi> umiv; typedef set<int> sti; typedef set<char> stc; typedef set<str> sts; typedef multiset<int> msti; typedef multiset<char> mstc; typedef multiset<str> msts; inline int segsum(int start,int end,int step){ if(end<start)return 0; return (((end-start)/step+1)*(start+end))>>1; } inline int fp(int b,int p,int mod=1e9+7){ int ans=1; while(p){ if(p&1)ans=(ans*b)%mod; p>>=1; b=(b*b)%mod; } return ans; } template<typename InputIterator,typename T = int> T accumulate(InputIterator first,InputIterator last,T init = T{}) { for (; first != last; ++first) { init += *first; } return init; } template<typename T,typename T2>inline pair<T,T2> operator+(const pair<T,T2>&a,const pair<T,T2>& b){return {a.ff+b.ff,a.ss+b.ss};} template<typename T,typename T2>inline pair<T,T2> operator-(const pair<T,T2>&a,const pair<T,T2>& b){return {a.ff-b.ff,a.ss-b.ss};} template<typename T,typename T2>inline pair<T,T2> operator*(const pair<T,T2>&a,const pair<T,T2>& b){return {a.ff*b.ff,a.ss*b.ss};} template<typename T,typename T2>inline pair<T,T2> operator/(const pair<T,T2>&a,const pair<T,T2>& b){return {a.ff/b.ff,a.ss/b.ss};} template<typename T> inline void maxs(T& x,const T& y){return void(x=max(x,y));} template<typename T> inline void mins(T& x,const T& y){return void(x=min(x,y));} template<typename T> inline void gcds(T& x,const T& y){return void(x=gcd(x,y));} template<typename T> inline void lcms(T& x,const T& y){return void(x=lcm(x,y));} template<typename T,typename T2>inline ostream& operator<<(ostream& os, const pair<T,T2>& p){ os<<"["<<p.ff<<","<<p.ss<<"]"; return os; } template<typename T>inline ostream& operator<<(ostream& os,const vector<T>& a) { for(const T& _:a)os<<_<<' '; return os; } template<typename T>inline ostream& operator<<(ostream& os,const vector<vector<T>>& a) { for(const vector<T>& _:a)os<<_<<endl; return os; } template<typename T>inline ostream& operator<<(ostream& os,const set<T>& a) { for(const T& _:a)os<<_<<' '; return os; } template<typename T,typename T2>inline ostream& operator<<(ostream& os,const map<T,T2>& a) { for(const auto& _:a)os<<_<<' '; return os; } template<typename T,typename T2>inline ostream& operator<<(ostream& os,const unordered_map<T,T2>& a) { for(const auto& _:a)os<<_<<' '; return os; } template<typename T>inline ostream& operator<<(ostream& os,const queue<T>& b) { queue<T> a=b; while(a.size()){ os<<a.front()<<" "; a.pop(); } return os; } template<typename T>inline ostream& operator<<(ostream& os,const stack<T>& b) { stack<T> a=b; while(a.size()){ os<<a.top()<<" "; a.pop(); } return os; } template<typename T>inline ostream& operator<<(ostream& os,const priority_queue<T>& b) { priority_queue<T> a=b; while(a.size()){ os<<a.top()<<" "; a.pop(); } return os; } template<typename T>inline ostream& operator<<(ostream& os,const priority_queue<T,vector<T>,greater<T>>& b) { priority_queue<T,vector<T>,greater<T>> a=b; while(a.size()){ os<<a.top()<<" "; a.pop(); } return os; } template<typename T,typename T2>inline istream& operator>>(istream& is,pair<T,T2>& p){ is>>(p.ff)>>(p.ss); return is; } template<typename T>inline istream& operator>>(istream& is,vector<T>& a) { for(T& _:a)is>>_; return is; } inline void print(){cout<<endl;} template<typename... Args> inline void print(const Args&... args){ ((cout<<args<<' '),...)<<endl; } inline void input(){} template<typename... Args> inline void input(Args&... args){ (cin>>...>>args); } #ifdef ONLINE_JUDGE template<typename... Args> inline void debug(const Args&... args){ return void("59"); } #else inline void debug(){cerr<<endl;} template<typename... Args> inline void debug(const Args&... args){ ((cerr<<args<<' '),...)<<endl; } #endif inline void yn(bool b){ if(b)yes; else no; } #define ASSERT(condition, message)\ if(condition){\ cerr<<"Assertion failed: "<<message<<" at "<<__FILE__<<":"<<to_string(__LINE__)<<endl;\ abort();\ } /////////////////////////////////////////////////////////////////// constexpr int N=2e5+5; constexpr int A=1e9+5; constexpr int MOD=1e9+7; constexpr i32 INF=INT32_MAX; constexpr ll INFL=INT64_MAX; constexpr int BLOCK=320; constexpr ldouble EPS=1e-9; constexpr int MAXQUERY=100; constexpr int dx[4]={-1,0,1,0}; constexpr int dy[4]={0,1,0,-1}; mt19937 mt(clock()); /////////////////////////////////////////////////////////////////// int n,m,k,t,a,b,x,y,w,ans; vi v,adj[N]; str s,q; inline void subtask1(){ for(char c:s)if(c=='0')return print(-1); print(0); } inline void subtask2(){ int cnt=0; for(char c:s)cnt+=(c=='0'); if(2*cnt-1>n)return print(-1); vci v; for(char c:s){ if(v.size() && v.back().ff==c)v.back().ss++; else v.pb({c,1}); } int cnt2=0; for(int i=0;i<v.size();i++){ if(v[i].ff=='0')cnt2++; } return print(cnt-cnt2); } inline void subtask3(){ vci v; for(char c:s){ if(v.size() && v.back().ff==c)v.back().ss++; else v.pb({c,1}); } int cnt=0,cnt2=0; for(int i=0;i<v.size();i++){ if(i!=0 && v[i].ff=='1')cnt2++; if(i!=v.size()-1 && v[i].ff=='0')cnt++; } return print(min(cnt,cnt2)); } inline void subtask4(){ ASSERT(59,"no subtask 4"); int cnt=0; for(char c:s)cnt+=(c=='1'); if(n>3*cnt+2)return print(-1); vci v; for(char c:s){ if(v.size() && v.back().ff==c)v.back().ss++; else v.pb({c,1}); } int cnt2=0; for(int i=0;i<int(v.size());i++){ if(v[i].ff=='0' && v[i].ss>2)cnt2++; } return print(cnt2); } inline void subtask5(){ vci v; for(char c:s){ if(v.size() && v.back().ff==c)v.back().ss++; else v.pb({c,1}); } int cnt=0; for(int i=0;i<int(v.size())-1;i++){ if(v[i].ff=='0' && v[i].ss>1)cnt++; } return print(cnt); } inline void subtask6(){ vci v; for(char c:s){ if(v.size() && v.back().ff==c)v.back().ss++; else v.pb({c,1}); } int cnt=0; for(int i=1;i<int(v.size())-1;i++){ if(v[i].ff=='1')cnt++; } return print(cnt); } inline void subtask7(){ for(char& c:s)c='0'+'1'-c; for(char& c:q)c='0'+'1'-c; reverse(all(s)); reverse(all(q)); ASSERT(q!="001","subtask 7 fail"); subtask5(); } inline void solve(void){ input(s,q); n=s.size(); m=q.size(); if(n<m)return print(0); if(q[0]=='1'){ for(char& c:s)c='0'+'1'-c; for(char& c:q)c='0'+'1'-c; } str q=::q; if(q=="0") subtask1(); if(q=="00") subtask2(); if(q=="01") subtask3(); if(q=="000")subtask4(); if(q=="001")subtask5(); if(q=="010")subtask6(); if(q=="011")subtask7(); } signed main(void){ int start=clock(); fastio; //usacoio("59"); int _testcase=1; //cin>>_testcase; while(_testcase--)solve(); debug("Time elapsed:",(clock()-start)/uint64_t(1e6),"ms"); }

Compilation message (stderr)

Main.cpp: In function 'void subtask2()':
Main.cpp:220:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long int'} and 'std::vector<std::pair<char, long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  220 |     for(int i=0;i<v.size();i++){
      |                 ~^~~~~~~~~
Main.cpp: In function 'void subtask3()':
Main.cpp:233:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long int'} and 'std::vector<std::pair<char, long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  233 |     for(int i=0;i<v.size();i++){
      |                 ~^~~~~~~~~
Main.cpp:235:13: warning: comparison of integer expressions of different signedness: 'll' {aka 'long int'} and 'std::vector<std::pair<char, long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  235 |         if(i!=v.size()-1 && v[i].ff=='0')cnt++;
      |            ~^~~~~~~~~~~~
#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...