1 条题解
-
0
自动搬运
来自洛谷,原作者为

include13_fAKe
一路坎坷而来,或将随风而去。搬运于
2025-08-24 22:52:53,当前版本为作者最后更新于2023-12-08 22:38:24,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题意
给定一个九宫标准数独游戏盘。里面有一些格子填了数,还有一些格子没有填数。
表示这个游戏盘要用三大类字符:
+和-:数独游戏盘的边框(包括九宫格的边框)。- 的数字:已填好的数字。
.:准备要填的数。
定义出现矛盾如下:在同一行(列、九宫格)中有重复的数字。
询问在已填好的数中,是否已出现了矛盾。(不把
.填完)。思路
直接暴力统计在同一行(列、九宫格)中是否出现了矛盾。
可以用 数组记录在这一行(列、九宫格)中 每一个数字出现的次数。
定义 为数字 的出现次数,每搜到一个数字 ,就让 的值加 。
若 ,说明已经出现了矛盾,可以马上输出
GRESKA,并结束程序。但一定要在搜完一行(列、九宫格)的时候清空 数组。
最后,如果游戏盘没有问题,要记得输出
OK再结束。代码
#include<bits/stdc++.h> using namespace std; char s[15][15]; int sum[15]; int main(){ for(int i=1;i<=13;i++){ for(int j=1;j<=13;j++){ cin>>s[i][j]; } } for(int i=1;i<=13;i++){ if(i%4==1) continue; memset(sum,0,sizeof(sum)); for(int j=1;j<=13;j++){ if(s[i][j]>='0'&&s[i][j]<='9'){ sum[s[i][j]-'0']++; if(sum[s[i][j]-'0']>1){ puts("GRESKA"); return 0; } } } } for(int i=1;i<=13;i++){ if(i%4==1) continue; memset(sum,0,sizeof(sum)); for(int j=1;j<=13;j++){ if(s[j][i]>='0'&&s[j][i]<='9'){ sum[s[j][i]-'0']++; if(sum[s[j][i]-'0']>1){ puts("GRESKA"); return 0; } } } } for(int i=1;i<=13;i++){ if(i%4!=2) continue; for(int j=1;j<=13;j++){ if(j%4!=2) continue; memset(sum,0,sizeof(sum)); for(int i1=0;i1<=2;i1++){ for(int j1=0;j1<=2;j1++){ if(s[i+i1][j+j1]>='0'&&s[i+i1][j+j1]<='9'){ sum[s[i+i1][j+j1]-'0']++; if(sum[s[i+i1][j+j1]-'0']>1){ puts("GRESKA"); return 0; } } } } } } puts("OK"); return 0; }
- 1
信息
- ID
- 9430
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者