【八中测试】平分石子
来源:互联网 发布:unity 编写js文件 编辑:程序博客网 时间:2024/05/01 14:51
3524: 平分石子
时间限制: 1 Sec
内存限制: 128 MB
题目描述
有3堆石子,初始时数量分别有A,B,C颗。每次操作是针对某两堆,设这两堆的当前石子数量为X,Y且X < Y. 然后从数量多的一堆中取出X颗石子放入数量少的一堆,使数量少的一堆加倍。操作后两堆石子的数量为:X+X, Y-X
问:经过任意多次的操作,能否使得3堆石子的数量相等?
输入
第1行:3个整数A,B,C (1<=A,B,C<=1000)
输出
第1行:如果可以相等,输出”possible”,否则输出”impossible”
样例输入
10 15 35
样例输出
possible
提示
第1次操作:10, (15,35) => 10, 20, 30
第2次操作:20, (10,30) => 20, 20, 20
来源
无
【思路】
开始看到此题的我,第一感觉就是模拟,找规律,但是后面却被卡死了……虽说在模拟的途中,我也曾经想过搜索,但似乎并没有什么卵用 -_-,还是没有用搜索的方法。好啦,不多说了,下面我就讲讲深搜的思路吧。
其实,深搜也不难啊,就是一个一个的枚举,但是注意要记忆化,与一个特判,这样可以节省很多时间。
①深搜(常规版)
#include<cstdio>#include<algorithm>using namespace std;bool dis[3001][3001],flag;void dfs(int A,int B,int C){ if(A==B&&B==C) { flag=1; return ; } if(dis[A][B]||!A||!B||!C) return ; dis[A][B]=1; if(A>B) dfs(A-B,B*2,C); else dfs(A*2,B-A,C); if(flag) return ; if(A>C) dfs(A-C,B,C*2); else dfs(A*2,B,C-A); if(flag) return ; if(B>C) dfs(A,B-C,C*2); else dfs(A,B*2,C-B); if(flag) return ;}int main(){ //freopen("pile.in","r",stdin); //freopen("pile.out","w",stdout); int A,B,C; scanf("%d %d %d",&A,&B,&C); if((A+B+C)%3==0) dfs(A,B,C); if(!flag) printf("impossible"); else printf("possible");}
②深搜(大神版)
#include<cstdio>#define MAXN 3000bool memo[MAXN+1][MAXN+1];void dfs(int s[]) { int t[3]; if(memo[s[0]][s[1]])return; memo[s[0]][s[1]]=true;//记忆化 for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(s[i]<s[j])//神奇之地 { t[0]=s[i]*2; t[1]=s[j]-s[i]; t[2]=s[0+1+2-i-j]; dfs(t); } }int main(){ //freopen("pile.in","r",stdin); //freopen("pile.out","w",stdout); int a[3], sum; scanf("%d%d%d", &a[0], &a[1], &a[2]); sum = a[0]+a[1]+a[2]; if( sum % 3 != 0) {//特判 printf("impossible\n"); return 0; } dfs(a); if(memo[sum/3][sum/3]) printf("possible\n"); else printf("impossible\n"); return 0;}
阅读全文
1 0
- 【八中测试】平分石子
- 取石子(八)
- Android RelativeLayout中实现控件平分屏幕
- Android RelativeLayout中实现控件平分屏幕
- NYOJ 取石子(八) 威佐夫博弈
- 取石子(八)(nyoj 886)
- nyoj886 取石子(八) 威佐夫博弈
- Android 实现九宫格(GridView中各项平分空间)
- RelativeLayout(Android)中实现控件平分屏幕
- 平分七筐鱼
- 平分蛋糕
- 平分七筐鱼
- 平分红酒
- 阿里巴巴测试题 -- 取石子问题
- nyoj 取石子(八)(威佐夫博弈,多种情况)
- 男人八题其二(POJ 1738) 石子合并 GarsiaWachs算法
- TestNG 八 并发测试
- (八) Testing(测试)
- 简易航班订票系统
- 九九乘法表
- NGUI裁剪粒子的实现,完全仿照原有的NGUI SoftClip逻辑思路,可多层裁剪
- 认识“安卓”,于我,也于所有想学习安卓的人
- 面向对象程序设计的结构
- 【八中测试】平分石子
- Linux (centos7) 防火墙命令
- Android 封装工具类之共享参数
- bzoj2425 [HAOI2010]计数 组合数
- 转:SKLearn中预测准确率函数介绍
- Object-c Blocks的理解
- POJ-3660 Cow Contest
- android studio 升级到3.0.1 原有项目运行在android 4.4停止运行
- Python基本语法