Submission #1031758

#TimeUsernameProblemLanguageResultExecution timeMemory
1031758vjudge1Mars (APIO22_mars)C++17
14 / 100
13 ms3312 KiB
#include "mars.h" #include<bits/stdc++.h> using namespace std; bitset<50> grid[50]; void flod(int i,int j){ if(i<0||i>30||j<0||j>30)return; if(!grid[i][j]) return; grid[i][j]=0; flod(i-1,j); flod(i+1,j); flod(i,j+1); flod(i,j-1); } string howmanyislands(int n){ int ans=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) ans+=grid[i][j],flod(i,j); string str; for(int i=0;i<100;i++) str+=48+(ans&1),ans>>=1; return str; } string encode_grid(int i,int j){ string str; for(int I=0;I<10;I++) for(int J=0;J<10;J++) str+=48+grid[i+I][j+J]; return str; } void putintogrid(string a,int i,int j){ int CC=0; for(int I=0;I<10;I++) for(int J=0;J<10;J++) grid[i+I][j+J]=grid[i+I][j+J]|a[CC++]=='1'; } std::string process(std::vector <std::vector<std::string>> a, int i, int j, int k, int n) { if(n<=4) { for(int i=0;i<2*n+1;i++) grid[i].reset(); if(i&1||j&1) return a[0][0]; if(max(i,j)==2*n-2*k-2) { grid[i][j]=a[0][0][0]=='1'; grid[i+1][j]=a[1][0][0]=='1'; grid[i][j+1]=a[0][1][0]=='1'; grid[i+1][j+1]=a[1][1][0]=='1'; grid[i+2][j+1]=a[2][1][0]=='1'; grid[i+1][j+2]=a[1][2][0]=='1'; putintogrid(a[2][0],i+2,j); putintogrid(a[2][2],i+2,j+2); putintogrid(a[0][2],i,j+2); } else return a[0][0]; if(k==n-1) return howmanyislands(2*n+1); return encode_grid(i,j); } int szofg=2*n; set<int> important; important.insert(szofg); important.insert(szofg-10); set<int>important2; important2.insert(0); important2.insert(szofg-10); if(szofg>20) important2.insert(szofg-20); if(szofg>20) important.insert(szofg-20); if(k==n-1){ int k=*++important2.begin(); if(important.size()==3) for(int i=0;i<3;i++) for(int j=0;j<3;j++) putintogrid(a[i][j],max(0,szofg-30+i*10),max(0,szofg-30+j*10)); else { putintogrid(a[0][0],0,0),putintogrid(a[2][2],k,k),putintogrid(a[2][0],k,0),putintogrid(a[0][2],0,k); } return howmanyislands(2*n+1); } if(k<5) { for(int i=0;i<2*n+1;i++) grid[i].reset(); if(i&1||j&1) return a[0][0]; int A=*--important.upper_bound(i); int B=*--important.upper_bound(j); if(max(i-A,j-B)==10-2*k-2) { grid[i][j]=a[0][0][0]=='1'; grid[i+1][j]=a[1][0][0]=='1'; grid[i][j+1]=a[0][1][0]=='1'; grid[i+1][j+1]=a[1][1][0]=='1'; grid[i+2][j+1]=a[2][1][0]=='1'; grid[i+1][j+2]=a[1][2][0]=='1'; putintogrid(a[2][0],i+2,j); putintogrid(a[2][2],i+2,j+2); putintogrid(a[0][2],i,j+2); } else return a[0][0]; return encode_grid(i,j); } int transport[30][30][15]; for(auto i:important2){ for(auto j:important2){ int CC=5; int origi=i; int origj=j; if(!i){ while(j)transport[0][j-=2][CC++]=1; }else if(!j) { while(i)transport[i-=2][0][CC++]=2; }else if(i==j){ while(i)transport[i-=2][j-=2][CC++]=3; } else if(i<j) { while(i>2)transport[i-=2][j-=2][CC++]=3; transport[--i][j-=2][CC++]=4; while(j>2)transport[i-=2][j-=2][CC++]=1; } else { while(i>2)transport[i-=2][j-=2][CC++]=3; transport[--i][j-=2][CC++]=5; while(j>2)transport[i-=2][j-=2][CC++]=2; } } } if(i==0&&j==0)return a[0][0]; if(transport[i][j][k]){ if(transport[i][j][k]==1) return a[0][2]; if(transport[i][j][k]==2) return a[2][0]; if(transport[i][j][k]==3) return a[2][2]; if(transport[i][j][k]==4) return a[1][2]; if(transport[i][j][k]==5) return a[2][1]; return a[0][0]; } int x=max(i,j); if(x==1&&important2.size()==3) { int c=4+*++important2.begin()/2; if(c==k){ return a[i][j]; } } return a[0][0]; }

Compilation message (stderr)

mars.cpp: In function 'void putintogrid(std::string, int, int)':
mars.cpp:34:46: warning: suggest parentheses around comparison in operand of '|' [-Wparentheses]
   34 |         grid[i+I][j+J]=grid[i+I][j+J]|a[CC++]=='1';
mars.cpp: In function 'std::string process(std::vector<std::vector<std::__cxx11::basic_string<char> > >, int, int, int, int)':
mars.cpp:101:17: warning: unused variable 'origi' [-Wunused-variable]
  101 |             int origi=i;
      |                 ^~~~~
mars.cpp:102:17: warning: unused variable 'origj' [-Wunused-variable]
  102 |             int origj=j;
      |                 ^~~~~
mars.cpp:116:41: warning: array subscript -1 is below array bounds of 'int [30][30][15]' [-Warray-bounds]
  116 |                 while(j>2)transport[i-=2][j-=2][CC++]=2;
      |                           ~~~~~~~~~~~~~~^
mars.cpp:97:9: note: while referencing 'transport'
   97 |     int transport[30][30][15];
      |         ^~~~~~~~~
mars.cpp:112:41: warning: array subscript -1 is below array bounds of 'int [30][30][15]' [-Warray-bounds]
  112 |                 while(j>2)transport[i-=2][j-=2][CC++]=1;
      |                           ~~~~~~~~~~~~~~^
mars.cpp:97:9: note: while referencing 'transport'
   97 |     int transport[30][30][15];
      |         ^~~~~~~~~
#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...