上海高校金马五校赛 D 数字游戏【套路】

链接:https://www.nowcoder.com/acm/contest/91/D
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
小埃和小森在玩一个数字游戏,小埃先从区间[L1, R1]里选择1个数字n1,小森看到小埃选的数字后,从[L2,R2]里选择1个数字n2, 将n1和n2连接在一起(n1在前, n2在后),形成一个新的数字,若这个数字可以被mod整除,那么小森获胜,否则小埃获胜。若两个人均采取最优策略,试问谁获胜?

输入描述:
输入测试组数T,每组数据,输入一行整数L1, R1, L2, R2, mod,其中1<=L1<=R1<109,1<=L2<=R2<109, 1<=mod<=106

输出描述:
每组数据输出一行,若小埃获胜,输出WIN,否则输出LOSE
示例1
输入
2
6 9 3 5 1
5 10 7 8 6
输出
LOSE
WIN

因为mod的取值非常的有限,所以可以直接暴力!

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<vector>
using namespace std;
#define ll long long int
#define INF 0x3f3f3f3f
#define Irish_Moonshine main
const int maxn = 1e6+2333;
//const ll mod = 1e9 + 7;
int a[maxn];
int b[maxn];
int tmp1, tmp2, mod;
void solve(int l1, int r1, int a[]) {
    if (r1 - l1 >= mod) {
        for (int i = 0; i < mod; i++) a[i] = 1;
    }
    else {
        if (tmp1 <= tmp2) {
            for (int i = tmp1; i <= tmp2; i++) {
                a[i] = 1;
            }
        }
        else {
            for (int i = 0; i <= tmp2; i++) a[i] = 1;
            for (int i = tmp1; i < mod; i++) a[i] = 1;
        }
    }
}
int Irish_Moonshine ()
{
    int T;
    scanf("%d", &T);
    while (T--) {
        int l1, l2, r1, r2; bool flag = 0;
        scanf("%d %d %d %d %d", &l1, &r1, &l2, &r2, &mod);
        for (int i = 0; i <= mod; i++) {
            a[i] = b[i] = 0;
        }
        tmp1 = l1 % mod;
        tmp2 = r1 % mod;
        solve(l1, r1, a);
        tmp1 = l2 % mod;
        tmp2 = r2 % mod;
        solve(l2, r2, b);
        if (a[0] == 1 && b[0] == 0) flag = 1;
        for (int i = 1; i < mod; i++) {

            if (a[i] == 1 && b[mod - i] == 0) {
                flag = 1; break;
            }
        }
        if (flag) printf("WIN\n");
        else printf("LOSE\n");
    }
    return 0;
}
//_CRT_SECURE_NO_WARNINGS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值