C. Card Game

题目:样例:

输入
4
4
-4 1 -3 5
4
1 -2 3 -4
3
-1 3 -5
1
-1

输出
5
4
2
0

思路:

        这里的题意就是,

        当我们 i 取奇数的时候,可以获得该奇数 i 的值,并去掉当前卡牌。

        当我们 i 取偶数的时候,去掉当前卡牌。

        这里我们去掉当前卡牌后,后面的卡牌下标 i 就会变化,后面的 i 的奇偶性就会变化。

        所以当我们一个一个从后面开始取数的时候,就可以巧妙的避开这些变化,之后就是贪心操作。

代码详解如下:

#include <iostream>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#define endl '\n'
#define int long long
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define uset unordered_set
#pragma GCC optimize(3,"Ofast","inline")
#define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;

inline void solve()
{	
	int n;
	cin >> n;

	umap<int,int>a;	// 存储卡牌数值

	for(int i = 1;i <= n;++i)
	{
		cin >> a[i];
	}

	// now 是取得的值多少
	int now = 0,ans = 0;

	// 开始贪心取值
	// 从后面开始取值,是因为当我们取一个 i 值后
	// 后面的 下标 i 就会变化,我们从后面 i 开始取值
	// 巧妙的避开这些变化
	for(int i = n;i > 0;--i)
	{
		// 当我们取得的 i 是偶数的时候
		if(i % 2 == 0)
		{
			// 更新我们的ans 
			ans = max(ans,now);
		}else
		{
			// 当我们取的 i 是奇数的时候,说明当前的 a[i] 也是可取的
			// 继续更新 ans
			ans = max(ans,a[i] + now);
		}
		
		// now 取值,我们只取 >= 0 更好的数值
		now += max(a[i],(int)0);
	}
	
	// 输出答案
	cout << ans << endl;
}

signed main()
{
//	freopen("a.txt", "r", stdin);
	___G;
	int _t = 1;
	cin >> _t;
	while (_t--)
	{
		solve();
	}
	return 0;
}

最后提交:

@font-face { font-family: 'spider'; src: url(../Fonts/恐怖蜘蛛.ttf) format("truetype"); } * { box-sizing: border-box; } html { font-family: 'spider', serif; min-width: 100vw; min-height: 100vh; } body { margin: 0; background: radial-gradient(#F15F66, #b46065); } .game-title { color: bisque; text-align: center; font-size: 3em; } .game-container { display: grid; grid-template-columns: repeat(8, auto); justify-content: center; gap: 10px; perspective: 500px; } .game-info-box { grid-column: 1/-1; display: flex; justify-content: space-between; } .game-info { color: rgb(13, 233, 233); font-size: 30px; } .card { position: relative; height: 180px; width: 130px; } /* .card:hover .card-back { transform: rotateY(-180deg); } .card:hover .card-front { transform: rotateY(0deg); } */ .card-back { transform: rotateY(0deg); } .card-front { transform: rotateY(-180deg); } .card[data-turn="front"] .card-back { transform: rotateY(-180deg); } .card[data-turn="front"] .card-front { transform: rotateY(0deg); } .card-face { position: absolute; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden; border-radius: 12px; border: 1px solid; font-size: 5em; backface-visibility: hidden; transition: transform 500ms ease-in-out; } .card-back { background-color: black; border-color: #FF6D00; } .card-front { background-color: antiquewhite; border-color: black; transform: rotateY(180deg); } .cobweb { width: 45px; height: 45px; position: absolute; transition: width 100ms ease-in-out, height 100ms ease-in-out; } .card-face:hover .cobweb { width: 50px; height: 50px; } .cobweb-top-left { top: 0; left: 0; transform: rotate(270deg); } .cobweb-top-right { top: 0; right: 0; } .cobweb-bottom-left { bottom: 0; left: 0; transform: rotate(180deg); } .cobweb-bottom-right { bottom: 0; right: 0; transform: rotate(90deg); } .spider { align-self: flex-start; transform: translateY(-20px); transition: transform 100ms ease-in-out; } .card-back:hover .spider { transform: translateY(0); cursor: pointer; } .card::before, .card::after { content: attr(data-value); font-size: 30px; position: absolute; } .card::before{ top: .1rem; left: .1rem; } .card::after{ bottom: .1rem; right: .1rem; transform: rotate(180deg); } .card.red{ color:red; display: flex; justify-content: center; align-items: center; } .card .love{ font-size: 4rem; } .card.black{ color:black; display: flex; justify-content: center; align-items: center; } .end{ width: 200px; margin: 50px auto; /* background-color: white; */ } .startBtn{ width: 200px; height: 50px; outline: none; text-align: center; background-color: transparent; border-radius: 10px; border: 2px solid salmon ; color: aliceblue; line-height: 50px; font-size: 20px; font-family: 'spider', serif; cursor: pointer; }这是css
08-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值