HUST 1372 marshmallow

很简单的博弈题.....算几组能得到规律了。

某个状态先手要赢 等价于 之前有一种状态是后手赢,先手可以保证让现在这个状态到达那个状态

#include<cstdio>
#include<cstring>
#include<ctime>
#include<algorithm>
using namespace std;

const int maxn = 10000 + 10;
int a[maxn], b[maxn];
int n, m;

int gcd(int a, int b)
{
    int t;
    while (b)
    {
        t = a%b;
        a = b;
        b = t;
    }
    return a;
}

void init()
{
    for (int i = 1; i <= 10000; i++) a[i] = i, b[i] = i;
    for (int i = 3; i <= 10000; i = i + 3)
    {
        swap(b[i - 1], b[i - 2]);
    }
    b[10000] = 10001;

}

int main()
{
    init();
    while (~scanf("%d%d", &n, &m)){
        int tot = 0;
        for (int i = 1; i <= 10000; i++)
            if (a[i] <= n&&b[i] <= m) tot++;

        int fz, fm;
        fz = tot;
        fm = m*n;
        if (tot == 0) fz = 0, fm = 1;
        else
        {
            int a=fz / gcd(fz, fm),b = fm / gcd(fz, fm);
            fz = a; fm = b;
        }
        printf("%d/%d\n", fz, fm);
    }
    return 0;
}
时间: 2024-10-08 10:02:16

HUST 1372 marshmallow的相关文章

HUST 1588 辗转数对

1588 - 辗转数对 时间限制:1秒 内存限制:128兆 155 次提交 27 次通过 题目描述 假设当前有一个数对(a, b),我们可以通过一步将这个数对变为一个新数对(a + b, b)或者是(a, a + b).初始的数对为(1, 1),你的任务是找到一个数字k,即通过最少的步数使得这个数对中至少一个数字等于n. 输入 输入包括多组数据,每组数据包括一行,每行有一个整数n. 输出 每组数据输出一行,每行一个整数n. 样例输入 5 3 样例输出 3 2 提示 第一个样例的方法是 (1,1)

HUST 1698 - 电影院 组合数学 + 分类思想

http://acm.hust.edu.cn/problem/show/1698 题目就是要把一个数n分成4段,其中中间两段一定要是奇数. 问有多少种情况. 分类, 奇数 + 奇数 + 奇数 + 奇数 奇数 + 奇数 + 奇数 + 偶数 偶数 + 奇数 + 奇数 + 奇数 偶数 + 奇数 + 奇数 + 偶数 然后奇数表达成 2 * a - 1这个样子,就能列出方程. 然后就是类似于解a1 + a2 + a3 + a4 = x的问题了. #include <cstdio> #include &l

HUST 1017 - Exact cover (Dancing Links 模板题)

1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 5584 次提交 2975 次通过 题目描述 There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is a selection of rows such that every column has a 1 in exactly one of the selected rows. Try to find o

勇士出征[HUST 1439]

勇士出征[HUST 1439] 时间1000ms,内存64MB 第十届"北大青鸟"杯浙江师范大学程序设计竞赛 这道题跟UVA-12100是一样的题目.我这里用的是STL的双端队列deque容器配合优先队列priority_queue,写起来会比较轻松:依次将输入压入队列,然后不断扫描队列,符合最大优先级的(优先队列的顶部元素)将其送出,而不再压入队尾.直到找到符合自己的标记的为止. 当然这道题也有用数组使用滚雪球的方式实现的,也就是开一个大的数组,每次将元素后挪时,直接将其放在数组末尾

UVALive 2659+HUST 1017+ZOJ 3209 (DLX

UVALive 2659 题目:16*16的数独.试了一发大白模板. /* * @author: Cwind */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include

HUST 1341 A - A Simple Task(哈理工 亚洲区选拔赛练习赛)

A - A Simple Task Time Limit:1000MS    Memory Limit:131072KB    64bit IO Format:%lld & %llu SubmitStatusPracticeHUST 1341 Description As is known to all, lots of birds are living in HUST. A bird has s units of food on the first day, and eats k units

HDOJ 1372 Knight Moves【BFS】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7482    Accepted Submission(s): 4481 Problem Description A friend of you is doin

hust 1589 找出子串

题目描述 给定一个字符串s ,求出一个子串t,满足如下性质:1.       t是s的一个前缀.2.       t是s的一个后缀.3.       t出现在s的中间(并非前缀和后缀).例如:字符串s为fixprefixsuffix,t可以是fix.字符串s为aaa,t可以是aa.输入 输入包括多组数据,每组数据为一行,每行有一个字符串s,其长度不超过10^6(一百万). 输出 每组数据输出一行,每行为一个字符串t,若不存在字符串t,则输出"Just a legend"(不包括引号).

HUST - 1010

HUST - 1010 类比POJ 2406 自己的什么话都没有的传送门 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 typedef long long LL; 6 7 const int maxn = 1e6 + 10; 8 int next[maxn]; 9 10 void kmp(char *pattern) { 11 //int n