求数据hack本蒟蒻的程序,玄关
查看原帖
求数据hack本蒟蒻的程序,玄关
1499478
Short_person楼主2025/7/22 19:10

调了半天程序,硬是没发现问题,交上去只有10分(AC on #2),可自己手动造样例程序输出也跟自己手算的一样。过路大佬请指个点吧QAQ。

分块程序:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,c,z[100005],id[100005],sum1[1000],tag[1000],f,a,b,m;
void xg(int x,int y){
	int l=id[x],r=id[y];
	for(int i=x;i<=min(y,l*c);i++){
		z[i]^=1;
		if(z[i]==1) sum1[l]++;
		else sum1[l]--;
	}
	if(l!=r){
		for(int i=r*c-c+1;i<=y;i++){
			z[i]^=1;
			if(z[i]==1) sum1[r]++;
			else sum1[r]--;
		}
	}
	for(int i=l+1;i<=r-1;i++){
		tag[i]^=1;
		sum1[i]=c-sum1[i];
	}
	return;
}
void chat(int x,int y){
	int ans=0;
	int l=id[x],r=id[y];
	for(int i=x;i<=min(y,l*c);i++){
		ans+=(z[i]^tag[l]);
	}
	if(l!=r){
		for(int i=r*c-c+1;i<=y;i++){
			ans+=(z[i]^tag[r]);
		}
	}
	for(int i=l+1;i<=r-1;i++){
		ans+=sum1[i];
	}
	cout<<ans<<"\n";
	return;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	c=sqrt(n);
	for(int i=1;i<=n;i++){
		id[i]=(i-1)/c+1;
	}
	for(int i=1;i<=m;i++){
		cin>>f>>a>>b;
		if(f==1){
			if(a<=b) chat(a,b);
			else chat(b,a);
		}
		else{
			if(a<=b) xg(a,b);
			else xg(b,a);
		}
	}
	return 0;
}
2025/7/22 19:10
加载中...