UOJ 225 [UR #15]奥林匹克五子棋
2016-08-29 22:48
405 查看
构造。
除了一些n=1,m=1,k=1……之类的特殊情况外,我们能够保证的最优解肯定是这样的:
OXOXO
OXOXO
XOXOX
XOXOX
OXOXO
那么k>2肯定都是有解。
然后判掉特殊情况,把这种图暴力跑出来输出就好了- -,一些细节要注意好
UOJ比赛出这种题真的好吗
除了一些n=1,m=1,k=1……之类的特殊情况外,我们能够保证的最优解肯定是这样的:
OXOXO
OXOXO
XOXOX
XOXOX
OXOXO
那么k>2肯定都是有解。
然后判掉特殊情况,把这种图暴力跑出来输出就好了- -,一些细节要注意好
UOJ比赛出这种题真的好吗
#include<cstdio> #define N 550 int map , n, m, k; void solve(int &p, int k) { int x=p/1000, y=p%1000; for(int j = y+1; j <= m; j++) if(map[x][j]==k) { p=x*1000+j; return; } for(int i = x+1;i <= n; i++) for(int j = 1; j <= m; j++) if(map[i][j]==k) { p=i*1000+j; return; } } int main() { scanf("%d%d%d",&n,&m,&k); if(k==1) { printf("-1\n"); return 0; } if(k==2 && n>=2 && m>=2) { printf("-1\n"); return 0; } if(n==1) { for(int i = 1; i <= m; i++) printf("%d %d\n",1,i); return 0; } if(m==1) { for(int i = 1; i <= n; i++) printf("%d %d\n",i,1); return 0; } if(n&1) for(int i = 1; i <= 505; i++) for(int j = 1; j <= 505; j++) if((i-1)%4<=1) { if(j&1)map[i][j]=1; else map[i][j]=-1; } else { if(j&1)map[i][j]=-1; else map[i][j]=1; } else for(int i = 1; i <= 505; i++) for(int j = 1; j <= 505; j++) if(i%4<=1) { if(j&1)map[i][j]=1; else map[i][j]=-1; } else { if(j&1)map[i][j]=-1; else map[i][j]=1; } int px=1001, py=1002; for(int i = 1, ii = n*m; i <= ii; i++) { if(i&1) { printf("%d %d\n",px/1000,px%1000); solve(px,1); } else { printf("%d %d\n",py/1000,py%1000); solve(py,-1); } } }
相关文章推荐
- UOJ187[UR#13]Ernd(斜率优化DP)
- [UOJ 74] 【UR #6】破解密码
- UOJ #242. 【UR #16】破坏蛋糕
- UOJ#61. 【UR #5】怎样更有力气
- UOJ 75 [UR #6]智商锁
- UOJ #134(【UR #9】App 管理器-tarjen+构造)
- UOJ#49. 【UR #3】铀仓库
- [UOJ]#33. 【UR #2】树上GCD
- UOJ 48 [UR #3]核聚变反应强度
- UOJ #188. 【UR #13】Sanrd
- uoj#187. 【UR #13】Ernd
- UOJ 21 [UR #1]缩进优化
- UOJ 49 [UR #3]铀仓库
- UOJ 49 【UR #3】铀仓库
- UOJ 133 [UR #9]电路手动分析
- [UOJ]#61. 【UR #5】怎样更有力气
- uoj #152. 【UR #10】汉诺塔
- UOJ #60. 【UR #5】怎样提高智商
- 【UOJ169】【UR #11】元旦老人与数列
- [构造 随机 生成树计数] UOJ #75 【UR #6】智商锁