| Task: | Sudoku |
| Sender: | |
| Submission time: | 2015-08-16 16:34:23 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 100 |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.05 s | details |
| #2 | ACCEPTED | 0.05 s | details |
| #3 | ACCEPTED | 0.05 s | details |
| #4 | ACCEPTED | 0.05 s | details |
| #5 | ACCEPTED | 0.06 s | details |
Code
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<long long, long long>
#define defmod 1000000007
using namespace std;
int su[9][9] = {0};
int n = 9;
void dbg(){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cout << su[i][j];
}
cout << endl;
}
}
bool onkook(){
for(int i = 0; i < 9; i++){
bool kay[10] = {0};
for(int j = 0; j < 9; j++)
kay[su[i][j]] = 1;
for(int j = 1; j <= 9; j++)
if(!kay[j])
return false;
}
for(int i = 0; i < 9; i++){
bool kay[10] = {0};
for(int j = 0; j < 9; j++)
kay[su[j][i]] = 1;
for(int j = 1; j <= 9; j++)
if(!kay[j])
return false;
}
vector<pair<int, int> > v;
v.push_back({0, 0});
v.push_back({3, 0});
v.push_back({6, 0});
v.push_back({0, 3});
v.push_back({3, 3});
v.push_back({6, 3});
v.push_back({0, 6});
v.push_back({3, 6});
v.push_back({6, 6});
for(auto f: v){
int i = f.first;
int j = f.second;
bool kay[10] = {0};
for(int k = i/3*3; k < (i+3)/3*3; k++){
for(int l = j/3*3; l < (j+3)/3*3; l++){
kay[su[k][l]] = 1;
//d[k][l] = 1;
//cout << "kaydaan " << k << ", " << l << endl;
}
}
for(int j = 1; j <= 9; j++)
if(!kay[j])
return false;
}
return true;
}
bool hae(int r, int t){
//cout << "nyt " << r << " " << t << endl;
if(r >= 9){
bool lol = onkook();
//dbg();
//cout << lol << " oliko oikein" << endl;
//int tmp; cin >> tmp;
return lol;
}
deque<int> jee;
int i = r; int j = t;
//cout << "paikka " << i << ", " << j << ":" << endl;
vector<bool> kay(10, 1);
//bool d[9][9] = {0};
for(int k = j-1; k >= 0; k--){
kay[su[i][k]] = 0;
//d[i][k] = 1;
//cout << "kaydaan " << i << ", " << k << endl;
}
for(int k = i-1; k >= 0; k--){
kay[su[k][j]] = 0;
//d[k][j] = 1;
//cout << "kaydaan " << k << ", " << j << endl;
}
for(int k = i/3*3; k < (i+3)/3*3; k++){
for(int l = j/3*3; l < (j+3)/3*3; l++){
kay[su[k][l]] = 0;
//d[k][l] = 1;
//cout << "kaydaan " << k << ", " << l << endl;
}
}
/*cout << endl;
for(int o = 0; o < n; o++){
for(int p = 0; p < n; p++){
cout << d[o][p];
}
cout << endl;
}*/
for(int k = 1; k <= 9; k++){
if(kay[k]){
jee.push_back(k);
}
}
bool ohi = false;
while(!jee.empty()){
su[r][t] = jee.front();
jee.pop_front();
if(t >= 8)
ohi|=hae(r+1, 0);
else
ohi|=hae(r, t+1);
if(ohi)
return true;
}
su[r][t] = 0;
return ohi;
}
int main(){
cin.sync_with_stdio(0);
cin.tie(0);
string s; cin >> s;
for(int i = 0; i < n; i++){
su[0][i] = s[i]-'0';
}
hae(1, 0);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cout << su[i][j];
}
cout << endl;
}
return 0;
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 592836471 |
| correct output |
|---|
| 592836471 836471592 471592836 928364715 364715928 ... |
| user output |
|---|
| 592836471 134257689 678149235 213465798 456798123 ... |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 672935418 |
| correct output |
|---|
| 672935418 935418672 418672935 729354186 354186729 ... |
| user output |
|---|
| 672935418 134268579 589147236 213456897 456789123 ... |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 329174658 |
| correct output |
|---|
| 329174658 174658329 658329174 291746583 746583291 ... |
| user output |
|---|
| 329174658 145268379 678359124 213485796 456791283 ... |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 376958421 |
| correct output |
|---|
| 376958421 958421376 421376958 769584213 584213769 ... |
| user output |
|---|
| 376958421 124367589 589124367 213475698 457689132 ... |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 875694321 |
| correct output |
|---|
| 875694321 694321875 321875694 756943218 943218756 ... |
| user output |
|---|
| 875694321 123578469 469123578 214356897 356789142 ... |
