求调简单模拟 悬赏双关!
查看原帖
求调简单模拟 悬赏双关!
716206
pengzy楼主2024/5/24 21:57

rt,WA

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int x=0,f=1;char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c)){x=x*10+c-48;c=getchar();}
	return x*f;
}
inline void write(int x)
{
	if(x>9)write(x/10);
	putchar(x%10+48);
}
struct card{
	int lvl;
	int k;
};
const int Max=1e5+10;
int T,n,a[Max]; 
bool cmp(card x,card y)
{
	return x.lvl>y.lvl;
}
int main()
{
	T=read();
	while(T--) {
		vector<card> v;
		bool b=false;
		int c[15],num=0,t=0;
		double sum=0,s=0;
		n=read();
		for(int i=0;i<n;i++)a[i]=read();
		for(int i=0;i<n;i++) {
			int op;op=read();
			v.push_back({op,a[i]});
		}
		for(int i=1;i<=8;i++)c[i]=read(),sum+=c[i];
		sort(v.begin(),v.end(),cmp);
		//for(auto i:v)cout<<i.k<<' '<<i.lvl<<endl;
		for(int i=0;i<n;i++) {
			if(num==8)break;
			if(v[i].k==2&&!b) {
				s+=v[i].lvl;
				num++;
				b=true;
			}
			else if(v[i].k==3&&t<3) {
				s+=v[i].lvl;
				t++;
				num++;
			}
			else if(v[i].k==1) {
				s+=v[i].lvl;
				num++;
			}
		}
		sum/=8.0;
		s/=8.0;
		//cout<<endl<<s<<' '<<sum<<endl;
		if(sum-s<=2&&t>0)cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
}
2024/5/24 21:57
加载中...