社区讨论

不懂就问+进食后人

P7910[CSP-J 2021] 插入排序参与者 10已保存回复 23

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
23 条
当前快照
1 份
快照标识符
@m1hrzgf1
此快照首次捕获于
2024/09/25 19:22
去年
此快照最后确认于
2025/11/05 01:50
4 个月前
查看原帖
这是我写的100pts代码:
C
#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飞的代码如下:
C
#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了,这是为什么呢?求助,壶关两枚。

回复

23 条回复,欢迎继续交流。

正在加载回复...