给各位提供一个对拍程序
查看原帖
给各位提供一个对拍程序
218999
啷里个浪楼主2021/12/9 09:54

造数据:

自己测的时候可以把n、m开小,n到10、m到20就行

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
using namespace std;

int main(){
	srand(time(0));
	int n=rand()%100+1;
	cout<<n<<" ";
	int m=rand()%200+1;
	cout<<m<<endl;
	for(int i=1;i<=n;i++)cout<<rand()%2<<" ";cout<<endl;
	for(int i=1;i<=m;i++){
		int op=rand()%5;
		int l=rand()%n,r=rand()%n;
		if(l>r)swap(l,r);
		cout<<op<<" "<<l<<" "<<r<<endl;
	}
	return 0;
}

暴力程序:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ls (x<<1)
#define rs (x<<1)|1
using namespace std;

const int N=1e5+10;
int n,m,a[N];

int main(){
	IOS;
	cin>>n;cin>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int j=1;j<=m;j++){
		int op,l,r;cin>>op>>l>>r;
		++l;++r;
		if(op==0)for(int i=l;i<=r;i++)a[i]=0;
		else if(op==1)for(int i=l;i<=r;i++)a[i]=1;
		else if(op==2)for(int i=l;i<=r;i++)a[i]^=1;
		else if(op==3){
			int ans=0;
			for(int i=l;i<=r;i++)ans+=a[i];
			cout<<ans<<endl;
		}else if(op==4){
			int f[N],ans=a[l];
			f[l]=a[l];
			for(int i=l+1;i<=r;i++)if(a[i]==1)f[i]=f[i-1]+1,ans=max(ans,f[i]);
			else f[i]=0;
			cout<<ans<<endl;
		}
		for(int i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl;
	}
	return 0;
}
2021/12/9 09:54
加载中...