为什么这个错了哇(悲)
  • 板块P9227 异或积
  • 楼主finalx
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/5/5 00:39
  • 上次更新2023/10/23 16:37:56
查看原帖
为什么这个错了哇(悲)
93491
finalx楼主2023/5/5 00:39
#include<bits/stdc++.h>
#define N 100010

using namespace std;


//b、c预处理:从前往后异或,从后往前异或
//b[i]存储a[0]~a[i-1]的异或和,c[i]存储a[i+1]~a[x-1]的异或和 
unsigned int a[N],b[N],c[N]; 
int t,x,k;
int main(){
	cin>>t;
	while(t--){
		cin>>x>>k;
		for(int i=0;i<x;i++) cin>>a[i];
		
		if(k%2!=0){//奇:特殊处理 
			b[0]=a[0],c[x-1]=a[x-1];
			for(int i=1;i<x;i++) b[i]=b[i-1]^a[i];
			for(int j=x-2;j>=0;j--) c[j]=c[j+1]^a[j];
		
			//0、x-1 
			a[0]=c[1],a[x-1]=b[x-2];
			
			//1~x-2
			for(int i=1;i<x-1;i++){
				a[i]=b[i-1]^c[i+1];
			}
		}
		for(int i=0;i<x-1;i++) cout<<a[i]<<' ';
		cout<<a[x-1];
		 
	}
	return 0;
} 

我的想法是k为偶的时候直接输出,奇的时候先预处理。 预处理的方法是:用b[i]存储a[0]~a[i-1]的异或和,c[i]存储a[i+1]~a[x-1]的异或和。

最终第i位的异或积就是a[i]=b[i-1]^c[i+1]。

请问带佬们,是我的想法错了还是代码实现错了哇,小样例对了但是大样例错了,一测评结果全WA掉了555(大悲)

2023/5/5 00:39
加载中...