B.HDU 1846    Brave Game

算是最简单的入门博弈题吧......

呃......我用的......算是不是方法的方法吧——找规律~

可以发现:X-M为奇数时,先手会输;而为偶数的时候,先手会赢~

代码:

 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5
6 int main()
7 {
8 int t,x,y;
9 scanf("%d",&t);
10 while(t--)
11 {
12 scanf("%d%d",&x,&y);
13 int k=y+1;
14 if(x%k==0)
15 printf("second\n");
16 else
17 printf("first\n");
18 }
19 return 0;
20 }

//memory:268KB   time:0ms

C.HDU 1527    取石子游戏

哎~肿么讲这道题呢~比赛的时候已经找出规律了......但是不知道怎么判断输入的数是规律里的数~= =

我做这道题时,可以很容易就发现,先手赢的几率很明显比后手大很多,因此就找出后手赢的情况【用(a,b)表示,且a<b】:

显然(1,2)(3,5)(4,7)(6,10)(8,13).......(ai,bi)【i从1开始】

ai是前面还未出现的数字的最小值,而bi则是ai+i......

T v T推到这一步,就不知该如何是好了= =结果看了网上的代码.......想死的心都有了......我肿么没想到除法...我肿么没想到黄金分割比= =,高中的数学都退给老师了么T T

接着我上面的想法,就差这临门一脚——a(k) = k * (1 + sqrt(5))/2                   b(k)=a(K)+K;

代码:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std; int main()
{
int a,b,k;
while(~scanf("%d%d",&a,&b))
{
if(a<b)
{
int t=a;
a=b;
b=t;
}
k=a-b;
a=(int)(k*(+sqrt(5.0))/2.0);
if(a==b)
printf("0\n");
else
printf("1\n");
}
return ;
}

//memory:240KB    time:15ms

最新文章

  1. SQL语句判断数据库、表、字段是否存在
  2. SAS提供的机器学习算法
  3. 关闭MyEclipse Derby服务
  4. .net 获取当前周及根据年和周获取起始结束时间
  5. 使用XAMPP本地安装Wordpress博客
  6. ubuntu 12.04安装redis2.6.16
  7. Cyclic Nacklace - HDU 3746(next求循环节)
  8. python学习第一天 -安装配置及其输入输出
  9. Linux特殊权限:SUID、SGID、SBIT
  10. Home | WebScraping.com
  11. python web
  12. jmeter3.2 创建webservice 测试
  13. LeetCode-2 Keys Keyboard
  14. 基于TODO的开发方法
  15. 【搭建】MongoDB在Linux环境的搭建
  16. 老王带你走过 Kafka 入门教程
  17. SQL Server 只安装客户端的方法
  18. using关键字在C#中的3种用法
  19. 菜鸡的考场emacs配置
  20. MongoDB(二)-- Java API 实现增删改查

热门文章

  1. [转载]Winform等待窗口的实现(附源代码)
  2. 在Unity中高效工作(上)
  3. 1090-Rock, Paper, Scissors
  4. DRUID连接池的简单使用
  5. JNI|在子线程中获得JNIEnv|AttachCurrentThread
  6. 【Pyhton Network】使用poll()或select()实现非阻塞传输
  7. 查找Form的文件名
  8. Android开发之应用程序窗体显示状态操作(requestWindowFeature()的应用)
  9. js制作圆角按钮(兼容谷歌,ie7,ie8)
  10. ThreadLocal实现方式&amp;使用介绍---无锁化线程封闭