51nod1185威佐夫博弈+大数乘法模拟
题目就是正常的威佐夫博弈 关于威佐夫博弈三大博弈详解
但是范围是1e18 因为威佐夫博弈需要乘以黄金分割数1.618....... 所以在乘的时候会损失精度
需要模拟下大数乘法 关于大数乘法模拟大数乘法原理及实现
这里再简单说一下 如何模拟的乘法 模拟小学生竖式运算
举个例子 三位数 123 乘以两位数 45
百位 | 十位 | 各位 | ||
1 | 2 | 3 | ||
乘 | 4 | 5 | ||
—————————————————————————————————— | ||||
6(5+1) | 1(10+1进1) | 5(15进1) | ||
4 | 9(8+1) | 2(进1) | ||
ans | 5 | 5 | 3 | 5 |
这个大家都会 等于 5535
那么 抽象一下
a0 a1 a2 三位数
t2 t1 两位数
---------------------------------------------------
t1*a0 t1*a1 t1*a2
t2*a0 t2*a1 t2*a2
——————————————————进位累加得到答案
那么我们也是这样模拟 将1.618先不管1 只看后边的小数
ll a[3]={618033988,749894848,204586834};//分成三部分 每部分是1e9
然后把 k 分成两部分
ll t1=k%mod;//后半部分
ll t2=k/mod;//前半部分 都是1e9大小
然后按照刚才列的竖式进行计算 注意进位 就ok了
ll ans=t1*a[2]; //可以看作三位数乘两位数得到的结果的个位
ans=t1*a[1]+t2*a[2]+ans/mod;//十位
ans=t1*a[0]+t2*a[1]+ans/mod;//百位
ans=t2*a[0]+ans/mod; //千位ans+=k;//注意刚开始 忽略了1.618的1 现在要加上k 也就是算上那个1
ac代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1e4+7;
typedef long long ll;
//0.6180339887 4989484820 4586834365
ll a[3]={618033988,749894848,204586834};
ll mod=1e9;
int T;
ll A,B;
int main(){scanf("%d",&T);while(T--){scanf("%lld%lld",&A,&B);ll x=min(A,B);ll y=max(A,B);ll k=y-x;// k*黄金比例ll t1=k%mod;ll t2=k/mod;ll ans=t1*a[2];ans=t1*a[1]+t2*a[2]+ans/mod;ans=t1*a[0]+t2*a[1]+ans/mod;ans=t2*a[0]+ans/mod;ans+=k;if(ans==x) printf("B\n");else printf("A\n");}return 0;
}
51nod1185威佐夫博弈+大数乘法模拟相关推荐
- 威佐夫博弈matlab,51nod1185 威佐夫游戏 V2 (模拟乘法)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的 ...
- 博弈——威佐夫博弈(hdu1527,2177)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1527 题目描述: 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不 ...
- 威佐夫博弈算法C++
在看本文章之前给大家说几句 如果你是先看了百度上的解释或者是其他文章,觉得很是繁琐,无法理解. 那么恭喜你,看本文会轻松很多.这里没有讲解原理之类的,只是结果.当你理解了之后,有兴趣的话就可以继续去钻 ...
- POJ1067_取石子游戏_威佐夫博弈
/* *State: 1067 Accepted 176K 16MS C++ 435B *题目大意: * 威佐夫博弈 *解题思路: * 略. */ #include <iostream> ...
- 洛谷P2252 取石子游戏(威佐夫博弈)
题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 博弈论入门之威佐夫博弈
威佐夫博弈 威佐夫博弈是一类经典的博弈问题 有两堆石子,两个顶尖聪明的人在玩游戏,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能取得人输,分析谁会获得胜利 博弈分析 ...
- 威佐夫博弈:百练OJ:1067:取石子游戏
威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...
- POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...
- BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈
题目描述 一天,Besssie准备和FJ挑战奶牛跳棋游戏.这个游戏上在一个M*N的棋盘上, 这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1,N-1). ...
- HDU - 1527 取石子游戏(威佐夫博弈)
题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...
最新文章
- github创建本地库后关联远程库
- 走向通用智能的核心:任务树的建立
- 17委托异步调用方法
- 从零单排学Redis【白银】
- 史上最详细Docker安装Mysql 带每一步详图及解释 并教你Docker 打印容器日志!!!相信值得你的阅读!!!
- jdk8 List集合 Stream distinct() 去重代码示例
- 【转】微软Azure Functions使用入门
- 学模拟电路的神器everycircuit
- 计算机网络实验:VLAN Practice Lab Setup in Packet Tracer and Configure DHCP Server for multiple VLAN
- AlexNet,VGG,GoogleNet,ResNet
- [转] Gmail 的Host解决方案
- nginx每日日志切割脚本
- Ubuntu alias在/etc/profile重启无效解决
- c语言用switch做一个计算器,求助。。关于用switch编写简易计算器
- 什么是蜂窝网络和蜂窝设备测试
- python计算方位角_利用python计算太阳天顶角、方位角、高度角
- 6个适合成年人的自学网站,每天半小时改变你一生
- UIImageView绘制圆形图片
- 一些热门的前端UI组件库(附用例)
- 合作:对应fork来的项目进行修改操作
热门文章
- 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
- 好程序员大数据技术分享:Zookeeper集群管理与选举...
- Case:update中把in改写成join性能提高数倍
- 数据结构 http://www.cnblogs.com/sun-haiyu/p/7704654.html
- springboot定制404错误信息
- buildroot 文件系统添加telnet, ssh, 以及制作注意事项
- 推荐记录片系列:Ultimate Factories系列和MegaStructures系列
- Android layoutInflate.inflate 方法具体解释,removeView()错误解决
- android内核调试的步骤
- 评说SAP Business ByDesign