12分求助
查看原帖
12分求助
760171
Binah_cyc楼主2022/12/13 14:26

码风清奇,用的特判得12分

#include <bits/stdc++.h>
using namespace std;
int n,ans,a[1005],num[10],s[10];
inline void r(int &n) {
	char c;
	int f=0;
	while(!isdigit(c=getchar()))
		(c=='c')&&(f=1);
	for(n=c-'0';isdigit(c=getchar());n=(n<<3)+(n<<1)+c-'0');
	(f)&&(n=~n+1);
}
int main() {
	r(n);
	for(int i=1;i<=n;i++)
	{
		r(a[i]);
		num[a[i]]++;
	}
	s[1]=num[1];
	s[2]=num[1]+num[2];
	s[3]=num[3]+s[2];
	for(int i=1;i<=n;i++){
		for(int j=i;j<=n;j++){
			if(a[i]==2&&i<=s[1]){
				if(a[j]==1&&s[1]<j<=s[2]){
					swap(a[i],a[j]);
					ans++;
				}
			}
			if(a[i]==3&&i<=s[1]){
				if(a[j]==1&&s[2]<j<=s[3]){
					swap(a[i],a[j]);
					ans++;
				}
			}
			if(a[i]==2&&s[2]<i<=s[3]){
				if(a[j]==3&&s[1]<j<=s[2]){
					swap(a[i],a[j]);
					ans++;
				}
			}
		}
	}
	for(int i=s[1]+1;i<=s[2];i++){
		for(int j=s[2]+1;j<=s[3];j++){
			for(int k=1;k<=s[1];k++){
				if(a[i]==1){
					if(a[j]==2){
						if(a[k]==3){
							swap(a[i],a[k]);
							swap(a[j],a[k]);
							ans+=2;
						}
					}
				}	
			}
		}
	}
	for(int i=s[2]+1;i<=s[3];i++){
		for(int j=1;j<=s[1];j++){
			for(int k=s[1]+1;k<=s[2];k++){
				if(a[i]==1){
					if(a[j]==2){
						if(a[k]==3){
							swap(a[i],a[k]);
							swap(a[j],a[k]);
							ans+=2;
						}
					}
				}	
			}
		}
	}
	cout<<ans;
	return 0;
}
2022/12/13 14:26
加载中...