CF-Round #640-div4-D题

CF-Round #640-div4-D题

D. Alice, Bob and Candies

传送门

这道题就是模拟+双指针~

首次见到div4的场,最后看standings的时候,我去,有人名字直接从青直接变蓝了=-=
太久没有写题了,最近忙着剪视频啥的了,害~

题目大意:Alice和Bob在比赛吃糖果,有n堆糖果摆成一排,Alice和Bob分别从左边和右边开始吃糖果,规定女士优先,Alice先开始吃糖果,每次吃的糖果要比对方前一次吃的糖果要多。如果剩下所有糖果的数量还是比对方上一次吃的糖果少,那么要把剩下的糖果吃完,糖果吃完代表游戏结束。问最终游戏Alice和Bob一共进行了几次移动,并且分别吃的糖果的数目有多少。输出

本题思路:这道题就是模拟游戏过程,l记录Alice当前的位置,r记录Bob当前的位置;ansl记录Alice吃的糖果总数,ansr记录Bob吃的糖果总数;suml记录Alice当前轮吃的糖果数,sumr记录Bob当前轮吃的糖果数;cnt记录到了哪一轮。
于是这样模拟下去就行了~(只要l <= r都可以进行下去)
这是一个O(N)的写法嘻嘻。

代码部分:

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		vector<int> a(n);
		for (int i = 0; i < n; i++)
		{
			scanf ("%d", &a[i]);
		}
		int l = 0, r = n - 1;
		int suml = 0, sumr = 0;
		int cnt = 0, ansl = 0, ansr = 0;
		while (l <= r)
		{
			if (!(cnt & 1))
			{
				int t = 0;
				while (l <= r && t <= sumr)
				{
					t += a[l++];
				}
				ansl += t;
				suml = t; 
			}
			else
			{
				int t = 0;
				while (l <= r && t <= suml)
				{
					t += a[r--];
				}
				ansr += t;
				sumr = t;
			}
			cnt++;
		}
		cout << cnt << " " << ansl << " " << ansr << endl;
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娃娃酱斯密酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值