|
题目 2475 [HZOI 2016]奇偶游戏
2016-09-25 15:54:10
|
|
说好的N==K呢
题目 2475 [HZOI 2016]奇偶游戏
2016-09-25 15:50:05
|
|
题目 2475 [HZOI 2016]奇偶游戏
2016-09-25 15:49:57
|
|
题目 2475 [HZOI 2016]奇偶游戏
2016-09-25 15:37:12
|
|
抛去所有不可能的,剩下的无论多么不可相信,但那就是真相。
题目 2475 [HZOI 2016]奇偶游戏
2016-09-25 15:35:41
|
|
#include<cstdio>
#include<iostream> #include<algorithm> #include<queue> using namespace std; int ans[2<<16]; int n; int vis[2<<16],sum=1; bool flag; int calc(int x) { int cnt=0; while(x) { if(x&1) cnt++; x=x>>1; } return cnt; } void dfs(int now,int step) { if(now==0&&step>1&&step<sum+1) //加个剪枝瞬间就过了 return; if(now==0&&step==sum+1){ flag=1; for(int i=1;i<=step;i++){ for(int j=1;j<=n;j++) if(ans[i]&(1<<(j-1)))printf("X"); else printf("O"); printf("\n"); } return; } if(step+calc(now)>sum+1) return; for(int i=1;i<=n;i++) { int nx=now^(1<<(i-1)); if(nx!=0&&vis[nx])continue; if(nx==0&&vis[nx]==1){ vis[nx]=2,ans[step+1]=nx; dfs(nx,step+1); ans[step+1]=0,vis[nx]=1; if(flag)return; } else if(nx!=0&&vis[nx]==0){ vis[nx]=1,ans[step+1]=nx; dfs(nx,step+1); ans[step+1]=0,vis[nx]=0; if(flag)return; } else continue; } } int main() { freopen("rocksa.in","r",stdin); freopen("rocksa.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++)sum=sum*2; ans[1]=0,vis[0]=1; dfs(0,1); return 0; } |
|
回复 @Satoshi : 神思路,赞一个!
|
|
感想如下:
这是一道比较简单的题,略微使用一些简单的技巧就可以实现,但我也有不少收获: 1.如果超时了,试试把printf这样的调试语句注释掉!这种无效IO会大大拖累程序运行! 2.这题我其实是运用了二次不等式的思想,逐一计算每一天的钱数,当然我相信大家一定会有更好的解法,我在这里就公开源码,供大家借鉴。 谢谢大家! |
|
每次都是彩色报错,数组开了5000000就神奇地A了,果然什么都得靠评测机
![]() |
|
懵逼
第一次交和第一个点答案差1 第二次交和第二个点答案差1 第三次交和第三个点答案差1 ..算了不交了
题目 2428 [HZOI 2016]猫和狗
2016-09-25 10:25:42
|
|
这个叫做Bouton定理,%%%L.Bouton
题目 452 Nim游戏!
2016-09-25 07:15:30
|
|
主席树水过
树状数组水过 话说为啥主席树这么慢...... |
|
题目 452 Nim游戏!
2016-09-24 21:09:25
|
|
初始化成-1
题目 1398 最长上升子序列
2016-09-24 20:02:52
|
|
|
|
这不科学,我的CDQ怎么可能会比暴力分还低
CDQ打死不过...我选择放弃治疗... |
|
K=N-K+1;
题目 2472 口袋的天空
2016-09-24 17:59:05
|
|
卡常数傻题,mdzz让不让人活了
顺便谴责一把打表的rank1~10 |
|
评论是正解
|
|
|