不懂就问+进食后人
查看原帖
不懂就问+进食后人
711299
cwxcfengyuhao楼主2024/9/25 19:20

这是我写的100pts代码:

#include<bits/stdc++.h>
using namespace std;
int n,op,u,v,a[8005],b[8005];
int kd(){
	int fh=1,z=0;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') fh=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') z=z*10+c-'0',c=getchar();
	return fh*z;
}
int main(){
	int q;
	n=kd(),q=kd();
	for(int i=1;i<=n;i++) a[i]=kd();
	while(q--){
		int d=n;
		op=kd();
		if(op==1) u=kd(),v=kd(),a[u]=v;
		else{
			v=kd();
			for(int i=1;i<v;i++) if(a[v]<a[i]) d--;
			for(int i=v+1;i<=n;i++) if(a[v]<=a[i]) d--;
			cout<<d<<'\n';
		}
	}
	return 0;
}

而我同学 @ cwxcdzw1 写的76pts的T飞的代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,q,ans,op,x,v,a[8006];
int kd(){
	int z=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		z=z*10+c-'0';
		c=getchar();
	}
	return z*f;
}
int main(){
	n=kd();
	q=kd();
	for(int i=1;i<=n;i++) a[i]=kd();
	while(q--){
		ans=n;
		op=kd();
		x=kd();
		if(op==1){
			v=kd();
			a[x]=v;
		}
		else{
			for(int i=1;i<x;i++) if(a[i]>a[x]) ans--;
			for(int i=x+1;i<=n;i++) if(a[i]>=a[x]) ans--;
			printf("%d\n",ans);
		}
	}
	return 0;
}

请勿怀疑我俩抄代码

如上,我们发现,两份代码思路一致,但我们将 @ cwxcdzw1 的ans开在循环以内,就不会T了,这是为什么呢?求助,壶关两枚。

2024/9/25 19:20
加载中...