链接: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