社区讨论

关于CF C

学术版参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lo2x1laz
此快照首次捕获于
2023/10/23 21:10
2 年前
此快照最后确认于
2023/10/23 21:10
2 年前
查看原帖
请问能指出代码中的错误吗,最好能提供一组hack数据。对拍拍了很久也没问题,但是cf连pretest都过不去
CPP
#include<bits/stdc++.h>
using namespace std;
int t,n,a[400005];
signed main(){
	cin>>t;
	while(t--){
		long long sum=0,sum2=0;
		long long sum3=0,c=2e9,p;
		scanf("%d",&n);
		for(int i=1;i<=2*n;i++){
			scanf("%d",&a[i]);
			sum+=abs(a[i]);
		}
		if(n==1){
			printf("%d\n",abs(a[2]-a[1]));	
		}
		else if(n%2==1){
			printf("%lld\n",sum);
		}
		else{
			if(n==2){
				for(int i=1;i<=2*n;i++){
					sum2+=abs(a[i]-2);
				}
				for(int i=1;i<=2*n;i++){
					if(abs(a[i]-n)<c){
						c=abs(a[i]-2);
						p=i;
					}
				}	
				for(int i=1;i<=2*n;i++){
					if(i==p)continue;
					sum3+=abs(a[i]+1);
				}
				printf("%lld\n",min(sum,min(sum2,sum3+c)));
			}
			else{
				for(int i=1;i<=2*n;i++){
					if(abs(a[i]-n)<c){
						c=abs(a[i]-n);
						p=i;
					}
				}	
				for(int i=1;i<=2*n;i++){
					if(i==p)continue;
					sum2+=abs(a[i]+1);
				}
				printf("%lld\n",min(sum,sum2+c));
			}
		}
	}
	return 0;
}

回复

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

正在加载回复...