2015-04-10 01:54:56
总结:11点开的一场,看来明天汇编是上不了了 QAQ...
好吧... 来看比赛,第一题打了一个暴力后发现是个技巧,果断改了,耗时比较多,166+分 = =!
第二题又打了一个暴力... 不过姿势不好,fst 掉了。最后发现别人也是暴力,不过是姿势更加优美的枚举。这题靠大数据 cha 了一发 :P
A:简单来说就是判断一个图能否构成像国际象棋那样的图。黑白相间。
发现把每个格子的横纵坐标相加,奇偶性一样的格子颜色须一样。
那么我们按顺序找到第一个非 ‘?’ ,比如找到 ‘W’,判断同奇偶的格子是否都是 ‘W’ 或 ‘?’
类似地再判断一遍 ‘B’ 即可。
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <vector> 6 #include <map> 7 #include <set> 8 #include <stack> 9 #include <queue> 10 #include <string> 11 #include <iostream> 12 #include <algorithm> 13 using namespace std; 14 15 #define MEM(a,b) memset(a,b,sizeof(a)) 16 #define REP(i,n) for(int i=0;i<(n);++i) 17 #define FOR(i,a,b) for(int i=(a);i<=(b);++i) 18 #define getmid(l,r) ((l) + ((r) - (l)) / 2) 19 #define MP(a,b) make_pair(a,b) 20 21 typedef long long ll; 22 typedef pair<int,int> pii; 23 const int INF = (1 << 30) - 1; 24 25 #line 5 "BichromeBoard.cpp" 26 27 class BichromeBoard { 28 int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; 29 public: 30 string ableToDraw(vector <string> board) { 31 int n = board.size(),m = board[0].size(); 32 vector <string> &g = board; 33 bool ans = true; 34 int f = -1; 35 int px,py; 36 for(int i = 0; i < n; ++i){ 37 for(int j = 0; j < m; ++j) if(g[i][j] != '?'){ 38 if(g[i][j] == 'W') f = 0; 39 else f = 1; 40 px = i,py = j; 41 break; 42 } 43 if(f != -1) break; 44 } 45 if(f != -1){ 46 int st = (px + py) % 2; 47 for(int i = 0; i < n; ++i){ 48 for(int j = 0; j < m; ++j) if(g[i][j] != '?'){ 49 int cur = (i + j) % 2; 50 int id = g[i][j] == 'W' ? 0 : 1; 51 if(cur == st && id != f){ 52 ans = false; 53 break; 54 } 55 if(cur != st && id == f){ 56 ans = false; 57 break; 58 } 59 } 60 if(ans == false) break; 61 } 62 } 63 if(ans) return "Possible"; 64 else return "Impossible"; 65 } 66 };