一个暴力枚举,测试数据都过了,也没有超时,但就是错了#4#5#9#10(WA)。
(尽力了)
#include<bits/stdc++.h>
using namespace std;
int n,cnt=0,ccnt;
int a[10][10];
vector<int> v[2][6][10];
//第一维:修改一个还是两个数
//第二维:从第几个开始修改
//第三维:修改(加上)的值
bool check(vector<int> &v1){
for(int i=2;i<=n;++i){//每组测试
ccnt=0;//不一样次数
for(int j=1;j<7;++j){//按位判断
if(v1[j-1]!=a[i][j]){
++ccnt;
if(j<6&&v1[j-1]-a[i][j]==v1[j]-a[i][j+1])//拨动两个
++j;
}
}
if(ccnt!=1)return false;//不能和原来一样,也不能太不一样
}
return true;//筛选出来
}
int main(){
cin>>n;
for(int i=1;i<=n;++i)
for(int j=1;j<6;++j)
cin>>a[i][j];//输入
for(int i=0;i<2;++i)
for(int j=0;j<6-i-1;++j)
for(int k=1;k<10;++k)
for(int m=1;m<7;++m)
(m>=j+1&&m<=j+i+1)?v[i][j][k].push_back((a[1][m]+k)%10):v[i][j][k].push_back(a[1][m]);
//以第一种情况扩展,在判断是否合法
for(int i=0;i<2;++i)
for(int j=0;j<6-i-1;++j)
for(int k=1;k<10;++k)
if(check(v[i][j][k]))
++cnt;
//以此判断
cout<<cnt<<endl;
return 0;
}
有没有大佬帮忙修改一下。