ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

10.26训练赛

2021-10-27 16:04:05  阅读:210  来源: 互联网

标签:ch const 10.26 int long 回合 训练赛 getchar


emmmmm, 本来事不打算打这场比赛的, 队友都没打, 但是我到实验室的时候刚好开始, 好多人在打, 那我也就打把, 然后, 拉的一批, 先是电脑连不上网, 然后进去后A掉了3道水题, 其中一个线段树调试的时间还是挺长的, 下次要注意, 然后我看到了A题, 我甚至可以说, 我真的想到了题解, 连滚动数组我都想到了, 但是在实现上还是没有成功, 一是没有看时间, 限制竟然是两秒,二是为了枚举可行的点用vector浪费了时间(或许是map),这道题的数据还是卡的比较死的, 所以写了两个小时后我就去写数学了, 在半夜,我看了H题, 也是触摸到了正解的边缘, 但还是没有突破, 所以, 怎么去突破这个瓶颈, 是我现在所需要面对的问题


A. Mio visits ACGN Exhibition
现在看这道题真的很简单, 就是dp一下就行了, 确实没什么可讲的, 不过下次有这种求方案数的题 , 可以把所有的情况都枚举了, 不要用map去强行开数组了, 因为数据过大的情况下空间会不够, 并且clear也会费时间, 即使这种情况不存在;

点击查看代码
#include <bits/stdc++.h>

using namespace std; 

//#define int long long
typedef long long ll;
const int mod = 998244353;
const int N = 3e5 + 10;
const int M = 5e2 + 10;

template < typename T > inline void read(T &x) {
	x = 0; T ff = 1, ch = getchar();
	while (!isdigit(ch)) {
		if (ch == '-') ff = -1;
		ch = getchar();
	} 
	while (isdigit(ch)) {
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	x *= ff;
}


int n, m, p, q, ans = 0, a[M][M];
int f[2][M][M << 1];

int main() {
	read(n), read(m), read(p), read(q);
	for (int i = 1; i <= n; ++i) 
		for (int j = 1; j <= m; ++j) 
			read(a[i][j]);
	f[0][1][0] = 1;
	for (int i = 1; i <= n; ++i) {
		int u = i & 1, v = u ^ 1;
		for (int j = 1; j <= m; ++j) {
			int w = a[i][j];
			if (!a[i][j]) f[u][j][0] = (f[v][j][0] + f[u][j - 1][0]) % mod;
			else f[u][j][0] = 0;
			for (int k = 1; k <= i + j - 1; ++k) 
				f[u][j][k] = (f[v][j][k - w] + f[u][j - 1][k - w]) % mod;
		}
	}
	int u = n & 1;
	for (int i = q; i <= n + m - 1 - p; ++i) 
		ans = (ans + f[u][m][i]) % mod;
	printf("%d\n", ans);
	return 0;
}

H. Hearthstone So Easy
挺有意思的一道题, 可能因为最近学了博弈论的缘故, 看到这个就想起来了, 但这个好像不符合那个条件, emmmm, 刚开始在我看来, 两个人直接杀就行了, 不用回血,然后我就二分去判断两个人在哪个回合会失败, 但我后来想到, 后面的人摸牌扣血在前面的人之后, 所以我只要一直回血称到前面的人扣血而死不就行了, 然后我就改了个二分的条件,还是错的。 其实这个题不具有二分性, 因为假如A在i+1回合刚好杀了B, 那么B在i回合一定能杀了A,非常绕, 就是在第i回合A操作以后, B进入了A的斩杀线, 但此时A的血量在B造成伤害之后下一回合还不至于掉血而死, 那么B就回血, 这样每个回合之后两人的血量会自然掉, 直到A能掉血掉死B就出手, 真的很绕。。。

点击查看代码
#include <bits/stdc++.h>

using namespace std; 

#define int long long
typedef long long ll;
const int mod = 998244353;
const int N = 5e4 + 10;
const int M = 5e2 + 10;

template < typename T > inline void read(T &x) {
	x = 0; T ff = 1, ch = getchar();
	while (!isdigit(ch)) {
		if (ch == '-') ff = -1;
		ch = getchar();
	} 
	while (isdigit(ch)) {
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	x *= ff;
}

int t, n, k;
ll sum[N]; 

signed main() {
	read(t);
	while (t--) {
		read(n), read(k);
		int b1 = n, b2 = n;
		b1 -= 1;
		if (b1 <= 0) {
			puts("freesin");
			continue;
		} 
		b2 -= 1, b2 -= k;
		if (b2 <= 0) puts("pllj");
		else puts("freesin");
	}
	return 0;
}

标签:ch,const,10.26,int,long,回合,训练赛,getchar
来源: https://www.cnblogs.com/AK-ls/p/15468706.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有