今天心血来潮调了一下60分的CSP-ST1,我发现统计的时候有一组情况第二位的下标打成了3(第30行),居然还有60分。然后还有几个点RE,于是把数组的10改成了11,轻松秒杀()()((考试的时候确实烧糊涂了)
原代码
int mp[10][10];
int mp2[10][10][10][10][10];
bool vis[10][10][10][10][10];
int n;
int main()
{
//freopen("lock.in", "r", stdin);
//freopen("lock.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= 5; j++) {
scanf("%d", &mp[i][j]);
}
}
if(n == 1) {
printf("81\n");
exit(0);
}
else {
memset(mp2, 0, sizeof(mp2));
for(int i = 1; i <= n; i++) {
memset(vis, 0, sizeof(vis));
for(int j = 1; j <= 9; j++) {
mp2[(mp[i][1] + j) % 10][(mp[i][2]) + j % 10][mp[i][3]][mp[i][4]][mp[i][5]] += pow(3, i);
mp2[mp[i][1]][(mp[i][2] + j) % 10][(mp[i][3] + j) % 10][mp[i][4]][mp[i][5]] += pow(3, i);
mp2[mp[i][1]][mp[i][2]][(mp[i][3] + j) % 10][(mp[i][4] + j) % 10][mp[i][5]] += pow(3, i);
mp2[mp[i][1]][mp[i][2]][mp[i][3]][(mp[i][4] + j) % 10][(mp[i][5] + j) % 10] += pow(3, i);
mp2[(mp[i][1] + j) % 10][mp[i][3]][mp[i][3]][mp[i][4]][mp[i][5]] += pow(3, i);//问题在这行
mp2[mp[i][1]][(mp[i][2] + j) % 10][mp[i][3]][mp[i][4]][mp[i][5]] += pow(3, i);
mp2[mp[i][1]][mp[i][2]][(mp[i][3] + j) % 10][mp[i][4]][mp[i][5]] += pow(3, i);
mp2[mp[i][1]][mp[i][2]][mp[i][3]][(mp[i][4] + j) % 10][mp[i][5]] += pow(3, i);
mp2[mp[i][1]][mp[i][2]][mp[i][3]][mp[i][4]][(mp[i][5] + j) % 10] += pow(3, i);
}
}
int ans = 0;
int cmpr = 0;
for(int i = 1; i <= n; i++) {
cmpr += pow(3, i);
}
for(int i = 0; i <= 9; i++) {
for(int j = 0; j <= 9; j++) {
for(int k = 0; k <= 9; k++) {
for(int x = 0; x <= 9; x++) {
for(int y = 0; y <= 9; y++) {
if(mp2[i][j][k][x][y] == cmpr) {
ans++;
// printf("%d%d%d%d%d\n", i, j, k, x, y);
}
}
}
}
}
}
printf("%d\n", ans);
}
正文完