zoukankan      html  css  js  c++  java
  • Beaver Game CodeForces

    CodeForces 78C

    题意

    有两只beaver,n个木块,每个都是m长。每一次,一个beaver可以选一块木头咬成多于1个的等长木块,而且每块木块长度是整数且不大于k。如果这个beaver不能玩了,那么另一只beaver赢。
    Timur是先手,Marsel是后手。输出赢家。
    (n,m,k (1leq n,m,kleq 10^9 ))

    思路

    • 博弈我真是做一题错一题
    • 参考网络资料
    • n是偶数的话,后手赢,后手一直模仿先手就好了。
    • n是奇数的话,如果(m)不小于 (k) 的非平凡因子,那么就可以把这个木块分成若干根不能再分的小木块,于是后手面对着偶数个木块(n-1块),所以这时先手赢。
    • 注意 i从1开始到(i*ileq m)结束,枚举可能切成的木块大小
    • 如果(1<i<k,frac{m}{i}geq k), 那么m/i是m的一个不小于k的非平凡因子,所以是先手赢。注意i不能为1.
    • 如果(igeq k, frac{m}{i}>1),那么i是m的一个不小于k的非平凡因子,所以是先手赢。注意m/i不能为1.这两个不给为1的情况都是为了防止不分木块的情况。
    • 如果i从2开始的话,考虑(n==1,m==2,k==1)的情况,虽然i==1,但是这里是把长为2的木块分成两块长为1的木块,所以是可以的。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k;
    int main(){
    	scanf("%d%d%d",&n,&m,&k);
    	bool flag=false;
    	if(n&1){
    		for(int i=1;i*i<=m;i++){
    			if(!(m%i)){
    				if(((m/i)>=k&&i>1)||(i>=k&&(m/i)>1))
    				{	flag=1;break;}				
    			}
    		}
    	}
    	printf(flag?"Timur
    ":"Marsel
    ");
    	return 0;
    } 
    
  • 相关阅读:
    EM and GMM(Code)
    EM and GMM(Theory)
    安装Sphere v2.7 遇到的问题
    pyqt的 .ui 转换为 .py 后的操作注意事项
    SVM入门(一)
    关于范数的理解
    快速排序的C语言实现
    QT编程环境搭建
    flex布局左边固定,右边自适应,右边内容超出会影响布局
    未知宽高的div怎么垂直水平居中
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/12804036.html
Copyright © 2011-2022 走看看