夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

とSRM本番

とりあえずまともなものだけ掲載。

過去問406Easy

なんか手こずってた。。。というか問題の条件がオツかった

class HappyCells {
   public:
   vector <int> getHappy(vector <string> grid)
  {
	vi res(3, 0);
	int dy[8] = {-1,1,-1,1,-1,1,0,0};
	int dx[8] = {-1,-1,0,0,1,1,-1,1};
	REP(i,SZ(grid)) {
		REP(j, SZ(grid[i])) {
			if (grid[i][j]=='.') {
				int dia=0, ort=0;
				REP(k, 8) {
					if (i+dx[k]>=0&&i+dx[k]<SZ(grid)&&j+dy[k]>=0&&j+dy[k]<SZ(grid[0])&&grid[i+dx[k]][j+dy[k]]=='.') {
						if (k==2||k==3||k==6||k==7) ort++;
						else dia++;
					}
				}
				if (ort==0&&dia==0) res[0]++;
				else if (ort==0&&dia!=0) res[1]++;
				else if (ort!=0&&dia==0) res[2]++;
			}
		}
	}
	return res;
  }
};

本番

まだ結果わからないけどとりあえずEasy212点ぐらい、Medium150点、Challenge一回成功です。うまくいけば。
とりあえずEasy。

これは簡単だった。

class CubeAnts {
   public:
   int getMinimumSteps(vector <int> pos)
  {
	REP(i,SZ(pos)) {
		switch (pos[i]) {
			case 1: case 4: case 3:
				pos[i]=1;
				break;
			case 2: case 5: case 7:
				pos[i]=2;
				break;
			case 6:
				pos[i]=3;
				break;
		}
	}
	SORT(pos);
	return pos[SZ(pos)-1];
  }
}

Mediumは色々と引っかかるところがあって怖かった。

ってか最初は300点以上でSubmitしてたけど後から考えて反例を見つけてしまい直前になおしたらこうなった。

つまりこれも合ってるか微妙。

class CubeStickers {
   public:
   string isPossible(vector <string> sticker)
  {
	map<string, int> p;
	REP(i,SZ(sticker)) {
		++p[sticker[i]];
	}
	int s=SZ(sticker);
	vector<string>::iterator it=unique(ALL(sticker)); sticker.erase(it, sticker.end());
	if (SZ(p)>=5) return "YES";
	if (SZ(p)<3) return "NO";
	bool flag=true;
	if (SZ(p)==3) {
		REP(i,SZ(sticker)) {
			if (p[sticker[i]]==1) {
				flag = false;
				break;
			}
		}
	} else if (SZ(p)==4) {
		REP(i,SZ(sticker)) {
			if (s-p[sticker[i]]>=3) {
				flag = false;
				break;
			}
		}
	}
	if (flag) return "YES";
	else return "NO";
  }
}

一人Challengeのケース作ってる間に終わってしまったのは残念でした。

SystemTestに得点奪われた気分wでは、結果を待ちたいと思いますノシ