zoukankan      html  css  js  c++  java
  • Number Cutting Game HDU

    两个对于一个数切割 k 次,然后切割以后把这些值加起来,然后继续切割 k 次,问谁先没有办法切割。

    对于第一个人,先枚举每种切割的情况,然后拿去给第二个人切割,如果第二个人怎么样都没办法切割出来,那么就是第一个人赢。如果第二个人有办法切割,在枚举第二个人所有可以切割的情况,给第一个人切割,如果第一个人没法切割,那么第二个人赢,如果第一个人还有办法切割,就继续循环下去。

    #include<map>
    #include<set>
    #include<ctime>
    #include<cmath>
    #include<stack>
    #include<queue>
    #include<string>
    #include<vector>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define lowbit(x) (x & (-x))
    #define INOPEM freopen("in.txt", "r", stdin)
    #define OUTOPEN freopen("out.txt", "w", stdout)
    
    typedef unsigned long long int ull;
    typedef long long int ll;
    const double pi = 4.0*atan(1.0);
    const int inf = 0x3f3f3f3f;
    const int maxn = 2e6+5;
    const int maxm = 1005000;
    const int mod = 1e9+7;
    using namespace std;
    
    ll n, m;
    int T, tol;
    ll a[20];
    
    ll dfs(ll nn, ll sum, ll cnt) {
        if(cnt < m-1 && nn == 0)    return 0;
        if(cnt == m-1) {
            if(dfs(nn + sum, 0, 0))    return 0;
            return 1;
        }
        for(int i=1; a[i]<=nn; i++) {
            if(dfs(nn/a[i], sum+nn%a[i], cnt+1))    return 1;
        }
        return 0;
    }
    
    int main() {
        a[0] = 1;
        for(int i=1; i<=19; i++)    a[i] = a[i-1]*10;
        while(~scanf("%lld%lld", &n, &m)) {
            int ans = dfs(n, 0, 0);
            printf("%d
    ", ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    3Dtouch 的实际应用详解(tableView中的应用)
    使用UIScrollView的zoomscale实现图片捏合放大
    SVN命令使用详解
    参数传递
    cookie文件路径
    XML和HTML之间的差异
    cssSelector元素定位方法
    如何调用一个数据完整的firefox浏览器
    Android生命周期详解
    android 利用countDownLatch实现主线程与子线程之间的同步
  • 原文地址:https://www.cnblogs.com/Jiaaaaaaaqi/p/9525809.html
Copyright © 2011-2022 走看看