感觉思路没问题但是星星点点的红?
查看原帖
感觉思路没问题但是星星点点的红?
1171330
gbrrain楼主2024/12/5 21:58
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[25],ans[1000005];
signed main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(a[j]*i<=a[i]*j) a[j]=-1;//如果比它前面的数的和小,那就没有用了
		}
	}
	int m;
	cin>>m;
	string s;
	cin>>s;
	int cnt=0;
	int f=1;
	for(int i=0;i<m;i++){//判断每个板块有多少个连续的"abc"
		if(s[i]=='a'&&s[i+1]=='b'&&s[i+2]=='c'){
			if(f==1) ans[++cnt]++;
			else ans[cnt]++;
			i+=2;
			f=0;
		}
		else f=1;
	}
	int aa=0;
	for(int j=1;j<=cnt;j++){
		for(int i=n;i>=1;i--){//每个板块从最大数开始看 如果数量够了且没被废除就消耗
			//(之前已经判断过了,所以后面的一定比前面的更优)
			while(ans[j]>i&&a[i]!=-1){
				aa+=a[i];
				ans[j]-=i;
			}
		}
	}
	cout<<aa<<'\n';
	return 0;
}

代码只有40分

有没有人能给我一组hack数据?
2024/12/5 21:58
加载中...