QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#220478 | #7606. Digital Nim | ucup-team2303# | WA | 586ms | 95196kb | C++14 | 2.6kb | 2023-10-20 14:22:10 | 2023-10-20 14:22:11 |
Judging History
answer
/*
60 + 0 + 100 + 64 = 224.
*/
#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define L(i, j, k) for (int i = (j); i <= (k); i++)
#define R(i, j, k) for (int i = (j); i >= (k); i--)
#define pb push_back
#define pii pair<int, int>
#define ll long long
inline ll read()
{
ll sum = 0, nega = 1;
char ch = getchar();
while (ch > '9'||ch < '0')
{
if (ch == '-') nega = -1;
ch = getchar();
}
while (ch <= '9' && ch >= '0') sum = sum * 10 + ch - '0', ch = getchar();
return sum * nega;
}
const int N = 19, M = (1 << 14) + 9;
int T, dp[2000], s[2000];
int f[16][137][M], to[137][M], k = 14;
inline int get(int y, int Mask)
{
int pos = 86, su = 0, nw = 0;
L(i, 86, 99)
{
int t = (i - 86);
if((Mask >> t) & 1) dp[i] = 1;
else dp[i] = 0;
su += dp[i];
}
L(i, 100, 113)
{
while(i * 10 - y - s[i] > pos * 10) su -= dp[pos], pos++;
if(su) dp[i] = 0;
else dp[i] = 1, su += dp[i], nw += 1 << (i - 100);
} return nw;
}
inline int get2(int y, int Mask)
{
int pos = 0, su = 0, nw = 0;
L(i, 0, 13)
{
if((Mask >> i) & 1) dp[i] = 1;
else dp[i] = 0;
su += dp[i];
}
L(i, 14, 99)
{
while(i * 10 - y - s[i] > pos * 10) su -= dp[pos], pos++;
if(su) dp[i] = 0;
else dp[i] = 1, su += dp[i];
if(i >= 86 && dp[i]) nw += 1 << (i - 86);
} return nw;
}
inline void init()
{
L(i, 0, 1000)
{
int t = i;
while(t) s[i] += t % 10, t /= 10;
}
L(i, 0, 135)
L(j, 0, (1 << k) - 1) to[i][j] = get(i, j);
L(i, 0, 135)
L(j, 0, (1 << k) - 1) f[0][i][j] = get2(i, j);
L(w, 1, 15)
L(i, 0, 135 - w * 9)
L(j, 0, (1 << k) - 1)
{
int nw = j;
L(t, 0, 9)
{
nw = f[w - 1][i + t][nw];
if(t < 9) nw = to[i + t + 1][nw];
}
f[w][i][j] = nw;
}
return ;
}
ll n, r, pown[19], Ma, sr;
inline int work(int Mask, int t, int y)
{
int pos = 0, su = 0, nw = 0;
L(i, 0, 13)
{
if((Mask >> i) & 1) dp[i] = 1;
else dp[i] = 0;
su += dp[i];
}
L(i, 14, 99)
{
while(i * 10 - y - s[i] > pos * 10) su -= dp[pos], pos++;
if(su) dp[i] = 0;
else dp[i] = 1, su += dp[i];
if(i >= 86 && dp[i]) nw += 1 << (i - 86);
} return dp[t / 10];
}
inline void solve()
{
n = read(); r = 0; Ma = (1 << 14) - 1; sr = 0;
pown[0] = 1;
L(i, 1, 18) pown[i] = pown[i - 1] * 10;
if(n % 10) {puts("Algosia"); return ;}
R(i, 15, 0)
{
while(r + pown[i + 3] <= n)
{
Ma = f[i][sr][Ma]; r += pown[i + 3], sr++;
Ma = to[sr][Ma];
}
}
if(work(Ma, (int)(n % 1000), sr)) puts("Bajtek");
else puts("Algosia"); return ;
}
signed main()
{
init();
T = read();
L(i, 1, T) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 586ms
memory: 94924kb
input:
4 1 10 42 190
output:
Algosia Bajtek Algosia Algosia
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 563ms
memory: 95196kb
input:
1 1
output:
Algosia
result:
ok single line: 'Algosia'
Test #3:
score: -100
Wrong Answer
time: 547ms
memory: 93072kb
input:
10000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 10...
output:
Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia Bajtek Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia Bajtek Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia Bajtek Algosia Algosia Algosia Algosia Algosia Algosia Algosia Algosia...
result:
wrong answer 1080th lines differ - expected: 'Bajtek', found: 'Algosia'