SRM 638
300: 例のアレ
{"YNY","YYY","YYY"}
{"YNY","YYY","YYY"} → "Possible"
{"YNY","YYY","YYY"}
やるだけ(ちゃんとサボらずやるということが本質)。
// I like wolves!! #include <vector> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <sstream> #include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <queue> #include <string.h> #include <complex> using namespace std; class ShadowSculpture { public: int dx[6]={1,-1,0,0,0,0}; int dy[6]={0,0,1,-1,0,0}; int dz[6]={0,0,0,0,1,-1}; int v[12][12][12]; int w[12][12][12]; string possible(vector <string> XY, vector <string> YZ, vector <string> ZX) { int n=XY.size(); for(int i=0;i<n;i++)for(int j=0;j<n;j++)for(int k=0;k<n;k++)v[i][j][k]=1; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(XY[i][j]=='N'){for(int k=0;k<n;k++)v[i][j][k]=0;} if(YZ[i][j]=='N'){for(int k=0;k<n;k++)v[k][i][j]=0;} if(ZX[i][j]=='N'){for(int k=0;k<n;k++)v[j][k][i]=0;} } } bool zentei=false; for(int i=0;i<n;i++)for(int j=0;j<n;j++){ if(XY[i][j]=='Y')zentei=true; if(YZ[i][j]=='Y')zentei=true; if(ZX[i][j]=='Y')zentei=true; } if(!zentei)return "Possible"; for(int i=0;i<n;i++)for(int j=0;j<n;j++)for(int k=0;k<n;k++){ if(v[i][j][k]){ for(int x=0;x<n;x++)for(int y=0;y<n;y++)for(int z=0;z<n;z++)w[x][y][z]=0; queue<pair<int,pair<int,int> > >Q; Q.push(make_pair(i,make_pair(j,k))); w[i][j][k]=1; while(Q.size()){ int X=Q.front().first; int Y=Q.front().second.first; int Z=Q.front().second.second; Q.pop(); for(int l=0;l<6;l++){ int tx=X+dx[l]; int ty=Y+dy[l]; int tz=Z+dz[l]; if(0<=tx&&tx<n&&0<=ty&&ty<n&&0<=tz&&tz<n&&!w[tx][ty][tz]&&v[tx][ty][tz]){ w[tx][ty][tz]=1; Q.push(make_pair(tx,make_pair(ty,tz))); } } } bool ok=true; for(int p=0;p<n;p++)for(int q=0;q<n;q++){ if(XY[p][q]=='Y'){ bool OK=false; for(int k=0;k<n;k++)if(w[p][q][k])OK=true; if(!OK)ok=false; }if(YZ[p][q]=='Y'){ bool OK=false; for(int k=0;k<n;k++)if(w[k][p][q])OK=true; if(!OK)ok=false; }if(ZX[p][q]=='Y'){ bool OK=false; for(int k=0;k<n;k++)if(w[q][k][p])OK=true; if(!OK)ok=false; } } if(ok)return "Possible"; } } return "Impossible"; } };
600: cgyさん渾身のオオカミ出題
ついにcgy回にwolfが出てきた。
やるだけ。450でも簡単すぎると思う。
// I like wolves!! import java.util.*; import java.util.regex.*; import java.text.*; import java.math.*; import java.awt.geom.*; public class NarrowPassage2{ public int count(int[] a, int b){ int n=a.length; long ret=1; int v[]=new int[n]; long mod=1000000007; for(int i=0;i<n;i++){ int at=0; int val=1010101010; for(int j=0;j<n;j++){ if(v[j]==0&&val>a[j]){ val=a[j];at=j; } } v[at]=1; int has=1; for(int j=at-1;j>=0;j--){ if(v[j]==1)continue; if(a[j]+val>b){ break; } has++; } for(int j=at+1;j<n;j++){ if(v[j]==1)continue; if(a[j]+val>b)break; has++; } ret=ret*has%mod; } return (int)ret; } } //Powered by [KawigiEdit] 2.0!
800: 木
解法はそんなに難しくなさそうだけど大変そう。
Challenge Phase:
ひたすら落ちそうなものに{"YNY","YYY","YYY"}{"YNY","YYY","YYY"}{"YNY","YYY","YYY"}を
投げまくる。のにまだ落とし残しがたくさんあった。
266.12 + 531.60 + 0 + 425 = 1222.72 (2nd)
Rating: 2366 -> 2516
過去最高順位。変な回に限ってレートが上がる。