萌新求助关于双倍经验
查看原帖
萌新求助关于双倍经验
398190
lanretE楼主2022/6/3 09:36

rt,从 P3029 过来的,把代码改了一下,为什么样例都过不了捏

P3029 AC 代码

#include<iostream>
#include<map>
#include<algorithm>
using namespace std;

struct node{
	int x,d;//坐标 种类 
}cow[50050],q[50050]; 
int n,idx[50050];
map<int,int>mp;

bool cmp(node a,node b){
	return a.x<b.x;
}

int main(){
	cin>>n;
	int sum=0;
	for(int i=1;i<=n;++i){
		cin>>cow[i].x>>cow[i].d;
		mp[cow[i].d]++;
		if(mp[cow[i].d]==1) ++sum;
	} 
	sort(cow+1,cow+n+1,cmp);
	int l=1,r=0;
	int ans=999999999;
	int cnt=0;
	mp.clear();
	for(int i=1;i<=n;++i){
		++mp[cow[i].d];
		if(mp[cow[i].d]==1) ++cnt;
		q[++r]=(node){cow[i].x,cow[i].d};
		if(mp[cow[l].d]>1){
			mp[cow[l].d]--;
			++l;
		}
		if(cnt==sum) ans=min(ans,q[r].x-q[l].x);
	}
	cout<<ans<<endl;
}

P2564只修改了 main

int main(){
	int m;
	cin>>m>>n;
	int sum=0,idx=0;
	for(int i=1;i<=n;++i){
		int x; cin>>x;
		for(int j=1;j<=x;++j){
			int y; cin>>y;
			cow[++idx].d=i; cow[idx].x=y;
			mp[cow[idx].d]++;
//			if(mp[cow[i].d]==1) ++sum;
		}
	}
	sort(cow+1,cow+m+1,cmp);
	int l=1,r=0;
	int ans=999999999;
	int cnt=0;
	mp.clear();
	for(int i=1;i<=m;++i){
		++mp[cow[i].d];
		if(mp[cow[i].d]==1) ++cnt;
		q[++r]=(node){cow[i].x,cow[i].d};
		if(mp[cow[l].d]>1){
			mp[cow[l].d]--;
			++l;
		}
		if(cnt==n) ans=min(ans,q[r].x-q[l].x);
	}
	cout<<ans<<endl;
}

不管数组越界RE的问题,为什么上面的代码样例都不对呢

2022/6/3 09:36
加载中...