50分,两个点RE,三个点WA,求助!
查看原帖
50分,两个点RE,三个点WA,求助!
744820
Eternal_SZC楼主2023/7/19 23:48
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[7000005],t[1000005],b[7000005];
template <typename TM>
void in(TM &n){
	char c=getchar();
	int f=1;
	while ((c>'9' || c<'0') && c!='-') c=getchar();
	if(c=='-') f=-1, c=getchar();
	for(n=0; c>='0'&&c<='9'; c=getchar()) n=n*10+c-'0';
	n*=f;
}
int main(){
	ll n,ans=0;
	in(n);
	for(int i=1;i<=n;i++){
		in(b[i]);
		a[i]=b[i];
		t[a[i]]=1;
	}
	sort(b+1,b+1+n);
	for(int i=1;i<n;i++){
		if(b[i]==b[i+1]){
			t[b[i]]++;
		} 
	}
	sort(a+1,a+n+1);
	int s1=6,s2=4,s3=5,m=1;
	for(int i=1;i<=n;i++){
		if(t[a[i]]==-1){
			continue;
		}
		if(m<a[i]){
			for(int j=m;j<=a[i];j++){
				if(j==a[i]){
					ans+=s3+t[a[i]];
					if(t[a[i]]>1) t[a[i]]=-1;
				}
				else ans+=s1;	
			}
		}
		else if(m>a[i]){
			for(int j=m;j>=a[i];j--){
				if(j==a[i]){
					ans+=s3+t[a[i]];
					if(t[a[i]]>1) t[a[i]]=-1;
				}
				else ans+=s2;
			}
		}
		if(i==1) ans+=s1; 
		m=a[i];	
	}
	ans+=(m*s2);
	printf("%lld",ans);
	return 0;
}  
2023/7/19 23:48
加载中...