这数据一看就是随机造的,我一个假解竟然只错2个点……
看出来是没考虑到有我这种骗分选手的可能性吧……
这种骗分应该狠狠的卡才行(没错,我是良心的)
以下骗分解骗了63pts,真不愧是太便宜了
#include <bits/stdc++.h>
using namespace std;
int n , p;
int a[505][505] , b[505] , c[505];
int cnt;
int main() {
// freopen("virus.in" , "r" , stdin);
// freopen("virus.out" , "w" , stdout);
cin >> n;
for(int i = 1 ; i <= n ; ++ i) {
for(int j = 1 ; j <= n ; ++ j) {
cin >> a[i][j];
}
}
cin >> p;
if(p == 1) {
for(int i = 1 ; i <= n ; ++ i) {
if(a[i][1] == i) {
cnt ++;
b[i] = 1;
}
}
cout << cnt << endl;
for(int i = 1 ; i <= n ; ++ i) {
if(b[i]) cout << i << " ";
}
}
else {
for(int i = 1 ; i <= n ; ++ i) {
if(a[i][1] == i) {
b[i] = 1;
c[i] = 1;
cnt ++;
}
}
for(int i = 1 ; i <= n ; ++ i) {
for(int j = 1 ; j <= n ; ++ j) {
bool flag = 1;
for(int k = 1 ; k <= n ; ++ k) {
if(b[a[i][j]] == 1) {
flag = 0;
break;
}
}
if(a[i][j] == i) flag = 0;
if(flag) {
if(!c[a[i][j]]) cnt ++;
c[a[i][j]] = 1;
// cout << i << endl;
}
else break;
}
}
cout << cnt << endl;
for(int i = 1 ; i <= n ; ++ i) {
if(c[i]) cout << i << " ";
}
}
return 0;
}
最后放上一张经久不衰的图:

咱也说不了啥