今年好不容易过了初赛,复赛却考了个0分,具体的故事请到我的博客里查看。
程序
题目你们都知道,我就直接写了。
//库我省略了。using namespace std;int color[105][105],colk[105],ans;struct point{ int num,col;} a[3005];int main(){ //freopen("sum.in","r",stdin); //freopen("sum.out","w",stdout); int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i].num; } for(int i=1;i<=n;i++) { cin>>a[i].col; color[a[i].col][++colk[a[i].col]]=i; } for(int i=1;i<=m;i++) { for(int j=1;j<=colk[i];j++) { for(int k=j+1;k<=colk[i];k++) { int x=color[i][j],z=color[i][k]; if(x!=z && (z-x)%2==0 && a[x].col==a[z].col) { ans+=(x+z)*(a[x].num+a[z].num); ans%=10007; } } } } cout<<
解法
让我们来看一下数据范围,40分是n<=3000,m<=100,n可能有点大,我们就不用他,用m,将颜色分类。因x和z要是同色,所以用三重循环,最外面一层循环颜色,中间x,最里面y,然后再循环中检验一下,这道题就顺利40分了。