2023年中国大学生程序设计竞赛女生专场(ccpc女生赛

2023年中国大学生程序设计竞赛女生专场(ccpc女生赛)

L–养成游戏

直接进行穷举

using namespace std;
struct LL
{
	int i,j,op,a,b,d,v;
}q[110];
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	for(int zz=0;zz<m;zz++)
	{
	cin>>q[zz].i>>q[zz].j>>q[zz].op>>q[zz].a>>q[zz].b>>q[zz].d>>q[zz].v;
	}
	int a[9];
	long long ans=-1,t;
	for(a[1]=0;a[1]<=k;a[1]++)
	{
	    for(a[2]=0;a[2]<=k;a[2]++)
	  {
		  for(a[3]=0;a[3]<=k;a[3]++)
	    {
		    for(a[4]=0;a[4]<=k;a[4]++)
	      {
			  for(a[5]=0;a[5]<=k;a[5]++)
	        {
	            for(a[6]=0;a[6]<=k;a[6]++)
	          {
	            	t=0;
		            for(int i=0;i<m;i++)
	            {
			if(q[i].v==0) continue;
			if(q[i].op==0)
			{
			if(((q[i].a*a[q[i].i])+(q[i].b*a[q[i].j]))<=q[i].d)
			t+=q[i].v;
			}
            else if(q[i].op==1)
			{
			if(((q[i].a*a[q[i].i])+(q[i].b*a[q[i].j]))>=q[i].d)
			     t+=q[i].v;
			}
		        } ans=max(ans,t);
	          }
			 
			}
		  }
		}
	  }
        
	}
    cout<<ans;
    return 0;
}
F–最长上升子序列

对样例进行模拟,从最小数开始排,在a[]数组中碰到前后相等的数(也就是上升的长度相等)就从后往前排,当a[]数组中所给的数比他前边的数小,就可以直接判断他为“-1“。

#include "vector" 
using namespace std;
const int N = 1e7;
vector<int > v[N];
int a[N], b[N];
int main(){
	int n;
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int max = 0, flag = 0;
	cin>>n;
	for(int i = 1; i <= n; i++){
		cin>>a[i];
		if(a[i] > max) 
		{
			if(a[i] - max > 1) flag = 1;
			max = a[i]; 
		}
		v[a[i]].push_back(i);
	}
	if(flag) cout<<"-1"<<endl;
	else
	{
		int p = 1;
		for(int i = 1; i <= max; i++)
			for(int j = v[i].size() - 1; j >= 0; j --)
			{
				int t = v[i][j];
				b[t] = p ++;
			}
		
		for(int i = 1; i <= n; i++)
			cout<<b[i]<<' ';
		cout<<endl;
	}
	
}
G–精灵宝可梦对战

使用队列,在进行攻击的时候,先出栈,对战况进行模拟,判断可梦是否还存活,如果存活,在重新进栈,直到某一方可梦数为0;注意攻击顺序会发生改变。

 using namespace std;
const int N = 1e5 + 5;
int h1[N], a1[N], b1[N], c1[N], d1[N], e1[N], w1[N], ea[N];
int h2[N], a2[N], b2[N], c2[N], d2[N], e2[N], w2[N], eb[N];
int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	int n, m, k;
	std::cin >> n >> m >> k;
	std::queue<int> A, B;
	for(int i = 1; i <= n; i ++) {
		std::cin >> h1[i] >> a1[i] >> b1[i] >> c1[i] >> d1[i] >> e1[i] >> w1[i];
		A.push(i);
	}
	for(int i = 1; i <= m; i ++) {
		std::cin >> h2[i] >> a2[i] >> b2[i] >> c2[i] >> d2[i] >> e2[i] >> w2[i];
		B.push(i);
	}
	int cnt = 0;
	int nowa, nowb;
	while(!A.empty() && !B.empty() && cnt < k) {
		nowa = A.front();
		nowb = B.front();
		A.pop();
		B.pop();
		int p = std::max(0, a1[nowa] - c2[nowb]);
		int ma = std::max(0, b1[nowa] - d2[nowb]);
		int ww = 0;
		if(ea[nowa] >= e1[nowa])
			ww = w1[nowa];
		int hurt = std::max({p, ma, ww});
		if(p == hurt) {
			ea[nowa] ++;
			h2[nowb] -= p;
		}
		else if(ma == hurt) {
			ea[nowa] ++;
			h2[nowb] -= ma;
		}
		else {
			ea[nowa] -= e1[nowa];
			h2[nowb] -= ww;
		}
		A.push(nowa);
		nowa = A.front();
		if(h2[nowb] <= 0) {
			if(!B.empty()) {
				nowb = B.front();
				B.pop();
			}
			else break;
		}
		p = std::max(0, a2[nowb] - c1[nowa]);
		ma = std::max(0, b2[nowb] - d1[nowa]);
		ww = 0;
		if(eb[nowb] >= e2[nowb])
			ww = w2[nowb];
		hurt = std::max({p, ma, ww});
		if(p == hurt) {
			eb[nowb] ++;
			h1[nowa] -= p;
		}
		else if(ma == hurt) {
			eb[nowb] ++;
			h1[nowa] -= ma;
		}
		else {
			eb[nowb] -= e2[nowb];
			h1[nowa] -= ww;
		}
		B.push(nowb);
		if(h1[nowa] <= 0) A.pop();
		cnt ++;
	}
	if(!A.empty() && !B.empty()) 
		std::cout << "Draw" << '\n';
	else if(!A.empty())
		std::cout << "Alice" << '\n';
	else
		std::cout << "Bob" << '\n';
	return 0;
}
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值