Submission #920825

#TimeUsernameProblemLanguageResultExecution timeMemory
9208258pete8Raspad (COI17_raspad)C++17
0 / 100
6071 ms147392 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<cassert> #include<limits.h> #include<cmath> #include<set> #include<algorithm> #include<bitset> #include<stack> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define pppiiii pair<pii,pii> #define ppii pair<int,pii> #define all(x) x.begin(),x.end() #define pb push_back #define mp make_pair #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-loops") #define int long long const int mod=1e9+7,mxn=1e5+5,lg=30,inf=1e18,minf=-1e9,Mxn=100000; void setIO(string name){ ios_base::sync_with_stdio(0); cin.tie(0); freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } char grid[mxn+5][55]; int col[mxn+5][55]; int u[4]={1,-1,0,0},r[4]={0,0,1,-1},nx,ny,cx,cy; int n,m,cnt=0; int stp[mxn+10]; void bfs(int x,int y){ queue<pii>q; q.push({x,y}); cnt++; stp[cnt]=x; col[x][y]=cnt; while(!q.empty()){ cx=q.front().f,cy=q.front().s; q.pop(); for(int i=0;i<4;i++){ nx=cx+u[i],ny=cy+r[i]; if(nx<=0||nx>n||ny<=0||ny>m)continue; if(col[nx][ny]||grid[nx][ny]=='0')continue; q.push({nx,ny}); col[nx][ny]=cnt; } } } int am[mxn+5][55]; int32_t main(){ fastio cin>>n>>m; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>grid[i][j]; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(grid[i][j]=='1'&&col[i][j]==0)bfs(i,j); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(col[i][j]!=col[i][j-1])am[i][col[i][j]]++; int ans=0; stack<pii>st[cnt+1]; vector<pii>keep; //3+1 for(int j=1;j<=cnt;j++)st[j].push({-1,0}); for(int i=1;i<=n;i++){ for(int j=1;j<=cnt;j++){ if(am[i][j]){ while(!st[j].empty()&&st[j].top().f>=am[i][j])st[j].pop(); st[j].push({am[i][j],i}); } keep.clear(); while(!st[j].empty())keep.pb(st[j].top()),st[j].pop(); reverse(all(keep)); for(int k=1;k<keep.size();k++)ans+=(keep[k].f*(keep[k].s-keep[k-1].s)); for(auto i:keep)st[j].push(i); } } cout<<ans; return 0; }

Compilation message (stderr)

raspad.cpp: In function 'int32_t main()':
raspad.cpp:82:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |    for(int k=1;k<keep.size();k++)ans+=(keep[k].f*(keep[k].s-keep[k-1].s));
      |                ~^~~~~~~~~~~~
raspad.cpp: In function 'void setIO(std::string)':
raspad.cpp:35:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |  freopen((name+".in").c_str(),"r",stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
raspad.cpp:36:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |  freopen((name+".out").c_str(),"w",stdout);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...