HDU 1517:A Multiplication Game】的更多相关文章

A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2674    Accepted Submission(s): 1532 Problem Description Stan and Ollie play the game of multiplication by multiplying an in…
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3832    Accepted Submission(s): 2183 Problem Description Stan and Ollie play the game of multiplication by multiplying an in…
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5833    Accepted Submission(s): 3303 Problem Description Stan and Ollie play the game of multiplication by multiplying an in…
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4633    Accepted Submission(s): 2631 Problem Description Stan and Ollie play the game of multiplication by multiplying an i…
思路:求必胜区间和必败区间! 1-9 先手胜 10-2*9后手胜 19-2*9*9先手胜 163-2*2*9*9后手胜 …… 易知右区间按9,2交替出现的,所以每次除以18,直到小于18时就可以直接判断了. 代码如下: #include<cstdio> int main() { double n; while(scanf("%lf",&n)!=EOF){ ) n/=; ) puts("Stan wins."); else puts("O…
题目大意:输入一个整数n.谁先报的数大于n,谁就输了.(初始值p  == 1 , 后一个人报的数必须在前一个人报的数的基础上乘上(2 ~ 9)之间的任意一个数) 解题思路:巴什博奕的变形 1) 解题思路: 如果输入是 2 ~ 9 ,因为Stan 是先手,所以Stan 必胜 如果输入是 10~18 ,因为Ollie 是后手,不管第一次Stan 乘的是什么,Stan肯定在 2 ~ 9 之间, 如果Stan乘以 2 ,那么Ollie就乘以 9 ,就到18了,如果Stan乘以 9 , 那么Ollie乘以…
题目大意:从1开始Stan与Ollie经行博弈,stan先手,每次将当前数乘上(2~9)间的任意数,最后一次操作后大于等于n的人获胜. 题目思路: 1-9 stan 胜 10-18 ollie胜 19-162 stan 胜 163-306 ollie胜 (stan为了接近那个数尽可能的扩大选择乘9,ollie知道自己无法在一步内获胜,为了避免stan获胜所以乘上最小的数2,接下来stan最大可以到达的数为乘上9后的数:162) -- 胜负区间对称! #include<stdio.h> #inc…
题意:两个玩家玩一个游戏,从 p = 1,开始,然后依次轮流选择一个2 - 9的数乘以 p,问你谁先凑够 p >= n. 析:找规律,我先打了一下SG函数的表,然后就找到规律了 我找到的是: 1 - 9                                 Stan wins.                         1  ~  9 10 - 18                             Ollie wins.                         …
HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用了bitset这个东西,能够用来存大的二进制数,那么对于行列相乘.事实上就几种情况,遇到0都是0了,1 1得1,2 1,1 2得2,2 2得1.所以仅仅要存下行列1和2存不存在分别表示的二进制数.然后取且bitcount一下的个数,就能够计算出对应的数值了 代码: 暴力: #include <cst…
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5536 Accepted Submission(s): 3151 Problem Description Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbe…
http://acm.hdu.edu.cn/showproblem.php?pid=1517 题意:每次乘上2~9..p>=n时赢.. #include <cstdio> #include <cstring> #include <map> using namespace std; typedef long long ll; map<ll, bool> h; ll n; bool dfs(ll p) { if(p>=n) return 0; if(…
如果n在[2, 9]区间,那么Stan胜. 如果n在[10, 18]区间,那么Ollie胜,因为不管第一次Stan乘上多少,第二次Ollie乘上一个9,必然会得到一个不小于18的数. 如果n在[19, 162]这个区间呢? 比如说n=19,那么Stan乘上个2,不管Ollie怎么乘,Ollie得到的数必然在[4, 18]这个区间里面,而这里的任意一个数乘上9的话,必然会得到一个不小于19的数,Stan胜. 再比如n=162,Stan最开始乘上一个9,就将Ollie乘完以后的数限制在[18, 81…
题目链接 本题很像bash博弈,但又有些许不同,因为这里是乘法,我们可以列出前几项可能 若n=2-9,那么first可以一次取完 若n=10-18,无论first怎么取,second都能一次取完 若n=19-162,那么无论second怎么取,first都能一次取完 若n=163-324 second一定可以取完 以此类推,类似bash博弈,每一组必胜必败态交换的距离为18的倍数,那么就将n/=18直到n<=18,然后判断即可 #include<bits/stdc++.h> using…
题意: 用整数p乘以2到9中的一个数字.斯坦总是从p = 1开始,做乘法,然后奥利乘以这个数,然后斯坦,以此类推.游戏开始前,他们画一个整数1 < n < 4294967295,谁先到达p >= n,谁就是赢家. 题解: 看这一道题就会联想起来巴什博弈,但是巴什博弈是不停的从一堆石子里面往外边拿:这个是不停的累乘,我们可以采用巴士博弈类似的思想来做, 我们可以找如果谁面对9*2的次方,那么谁就会输. 因此,当n>18时,n不断地除以18,最后如果n<=9则先手必胜,否则后手必…
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Given two matrices A and B of size n×n, find the product of them. bobo hates big integers. So you are only asked to find t…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920 解题报告:求两个800*800的矩阵的乘法. 参考这篇论文:http://wenku.baidu.com/link?url=261XeEzH-AZkFGPiN63t1nnojoQF50yiuMoviHroGjVXjjRlxFcvWLcws0jgQcmZo4oA9BJcjnPxVreWRu-XXa9zb6r5gUUTxmBXn_qWSsu&qq-pf-to=pcqq.group 我看过了,只是简…
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1775    Accepted Submission(s): 796 Problem Description Given two matrices A and B of size n×n, find the product of them.…
Matrix multiplication                                                                           Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Given two matrices A and B of size n×n, find the…
Problem Description Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game…
各种TEL,233啊.没想到是处理掉0的情况就能够过啊.一直以为会有极端数据.没想到居然是这种啊..在网上看到了一个AC的奇妙的代码,经典的矩阵乘法,仅仅只是把最内层的枚举,移到外面就过了啊...有点不理解啊,复杂度不是一样的吗.. Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 640 …
题目链接 Matrix multiplication 求矩阵A和B相乘的结果. 因为答案只要对3取模,所以我们可以通过一些方法来加速计算. 我们对两个矩阵各开两个bitset,分别存储模3余1和模3余2的数. 然后相乘的时候and一下就好了. c[i][j] = f(a_one[i] & b_one[j]) + f(a_one[i] & b_two[j]) * 2 + f(a_two[i] & b_one[j]) * 2 + f(a_two[i] & b_two[j]) $…
题意:求两个n x n的矩阵相乘后模3的结果,n <= 800. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920 -->>呀呀.. 1.3层计算的for进行缓存优化,依据CPU的L1级缓存的实现原理,降低缓存的变更.假设每次都计算完一个单元格的结果再计算下一个单元格的结果.那么被乘矩阵的訪问就会频繁地更新缓存,使效率非常低.. 2.输入开挂,G++提效500ms+.. 3.对乘法进行剪枝.. 没有第1个操作,后果是严重的.. n^3…
博弈题: 题意:2 个人玩游戏,从 1 开始,轮流对数进行累乘,直到超过一个指定的值. 解题思路:如果输入是 2 ~ 9 ,因为Stan 是先手,所以Stan 必胜如果输入是 10~18 ,因为Ollie 是后手,不管第一次Stan 乘的是什么,Stan肯定在 2 ~ 9 之间,如果Stan乘以 2 ,那么Ollie就乘以 9 ,就到18了,如果Stan乘以 9 ,那么Ollie乘以大于1的数都都能超过 10 ~ 18 中的任何一个数.Ollie 必胜如果输入是 19 ~ 162,那么这个范围是…
题目链接 题意 : 给你两个n*n的矩阵,然后两个相乘得出结果是多少. 思路 :一开始因为知道会超时所以没敢用最普通的方法做,所以一直在想要怎么处理,没想到鹏哥告诉我们后台数据是随机跑的,所以极端数据是不可能会有的,而我们一开始一直在想极端数据能接受的方法......后来看了鹏哥的做法,就是把是0的地方都跳过就可以了,用矩阵保存前一个非0数的位置是多少.二师兄给我看了一个代码,人家根本没用别的优化,直接将最里层k的循环提到了最外层,然后就AC了,对此我表示无语. #include <cstdio…
题目链接 题意:给两个矩阵a, b, 计算矩阵a*b的结果对3取余. 分析:直接计算时间复杂度是O(n^3),会超时,但是下面第一个代码勉强可以水过,数据的原因. #include <iostream> #include <cstdio> #include <vector> #include <cstring> #include <cstdlib> #include <algorithm> +; using namespace std…
题意:2 个人玩游戏,从 1 开始,轮流对数进行累乘,直到超过一个指定的值. 解题思路:如果输入是 2 ~ 9 ,因为Stan 是先手,所以Stan 必胜如果输入是 10~18 ,因为Ollie 是后手,不管第一次Stan 乘的是什么,Stan肯定在 2 ~ 9 之间,如果Stan乘以 2 ,那么Ollie就乘以 9 ,就到18了,如果Stan乘以 9 ,那么Ollie乘以大于1的数都都能超过 10 ~ 18 中的任何一个数.Ollie 必胜如果输入是 19 ~ 162,那么这个范围是 Stan…
题意略. 思路: 我们分别来考虑n取到的各个区间,从而发现其中的规律: [2,9] 明显 Stan 必胜. 但是当n = 9 + 1时,Stan无论如何也不能取胜,并且此时,假设 Stan 取值 x ,那在[10 , x * 9]这个范围内一定是Ollie必胜. Stan 一定会贪心地令x = 2,这样可以尽可能减损Ollie的必胜范围,而Ollie会使自己的数字选择成9,这样可以尽可能扩大自己的必胜范围. 所以:[10,18 = 2 * 9] Ollie 必胜 当n = 18 + 1时,Oll…
易知2-9为先手胜 继续递推下去 10-18 后手胜 再推发现19-162先手胜 即发现有9(9) 18(2*9) 162(9*2*9)..... #include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll n; while (cin >> n) { ll p = ; ; i; i++) { ) { p *= 9LL; } else { p *= 2LL; } if (p &g…
题目链接 题目大意 多组输入,给你两个n×n的矩阵,要你求他们相乘%3的值 题目思路 这个题目主要是要了解内存访问连续化,要尽量每次访问连续的内存 所以第一种方法会超时,第二种则AC.一种卡常技巧 代码 #include<set> #include<map> #include<queue> #include<stack> #include<cmath> #include<cstdio> #include<vector> #…
先从最基础的矩阵快速幂加速递推开始. HDU 1005 Number Sequence |f[n-2],f[n-1]|* |0 B| =|f[n-1], B*f[n-2]+A*f[n-1]|=|f[n-1],f[n]|   |1 A| 建立矩阵如上然后利用快速幂求解即可.答案是mat[0][1]. #include<iostream> #include<vector> #include<cmath> #include<map> #include<alg…