首页 > 其他分享 >[赛记] 暑假集训CSP提高模拟24

[赛记] 暑假集训CSP提高模拟24

时间:2024-08-21 20:39:46浏览次数:3  
标签:24 赛记 cout int cin long freopen include CSP

与和 100pts

签到题但还是做了很久。。。

考虑与的条件,可以发现,如果将 $ a $ 转化成二进制,那么二进制上为 $ 1 $ 的位置 $ x $ 和 $ y $ 都必须是 $ 1 $,所以首先将 $ s $ 减去 $ 2 \times a $,然后再判断一下 $ (s - 2 \times a) \operatorname{and} a $ 是否为 $ 0 $ 即可;

赛时用唯一分解定理做的,打了61行,确实麻烦了,但更好理解;

点击查看代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int t;
long long a, s;
long long cnt, ma, acnt, bcnt;
long long o;
bool vis[105];
int main() {
	freopen("and.in", "r", stdin);
	freopen("and.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while(t--) {
		cin >> a >> s;
		cnt = 0;
		memset(vis, 0, sizeof(vis));
		ma = 0;
		o = 0;
		acnt = 0;
		bcnt = 0;
		long long aa = a;
		long long bb = s;
		while(aa) {
			acnt++;
			aa >>= 1;
		}
		while(bb) {
			bcnt++;
			bb >>= 1;
		}
		acnt--;
		bcnt--;
		ma = max(acnt, bcnt);
		while(a) {
			if (a & 1) {
				cnt += (1ll << o);
				vis[o] = true;
			}
			a >>= 1;
			o++;
		}
		if (2 * cnt > s) {
			cout << "No" << '\n';
			continue;
		}
		s -= 2 * cnt;
		for (int i = ma; i >= 0; i--) {
			if (vis[i]) continue;
			if (s >= (1ll << i)) {
				s -= (1ll << i);
			}
		}
		if (s == 0) cout << "Yes" << '\n';
		else cout << "No" << '\n';
	}
	return 0;
}

函数 0pts

赛时没看;

考虑怎样才能使套出来的的函数值尽可能大;

设 $ f_1(x) = a_1x + b_1 \ \ \ \ \ f_2(x) = a_2x + b_2 $,则若有 $ f_1(f_2(x)) > f_2(f_1(x)) $,那么需要满足的条件为:

\[f_1(f_2(x)) > f_2(f_1(x)) \]

\[a_1a_2x + a_1b_2 + b_1 > a_2a_1x + a_2b_1 + b_2 \]

\[b_1(1 - a_2) > b2(1 - a_1) \]

这样,我们想让 $ f_2 $ 在前面,所以我们要按 $ b_1(a_2 - 1) > b_2(a_1 - 1) $ 排序,然后DP即可;

具体的,设 $ f_i $ 表示确定了 $ i $ 个函数的最大值,按照01背包转移即可;

时间复杂度:$ \Theta(nk) $;

点击查看代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define int long long
int n, k;
struct sss{
	int a, b;
}e[5000005];
int f[5000005];
bool cmp(sss x, sss y) {
	return x.b * (y.a - 1) > y.b * (x.a - 1);
}
main() {
	freopen("func.in", "r", stdin);
	freopen("func.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> e[i].a >> e[i].b;
	}
	sort(e + 1, e + 1 + n, cmp);
	f[0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = k; j >= 1; j--) {
			f[j] = max(f[j], f[j - 1] * e[i].a + e[i].b);
		}
	}
	cout << f[k];
	return 0;
}

袋鼠 0pts

赛时做了3h,结果一分没得。。。

预设性DP(早就忘了。。。)

设 $ f_{i, j} $ 表示填了前 $ i $ 个数,有 $ j $ 个连续段的方案数,特别的,序列开头是 $ s $ ,结尾是 $ t $;

考虑转移:

因为要满足左右跳的限制,所以不能填在连续段的左右两端;

  1. 新开一段;

上一次有 $ j - 1 $ 个段,所以一共有 $ (j - 2) + 2 = j $ 个位置可以新开段(加二是因为头和尾能放),特别的,$ i > s $ 说明头不能放, $ i > t $ 说明尾不能放;

  1. 连接两个连续段;

上一次有 $ j + 1 $ 个连续段,所以有 $ j $ 个空位可以放;

  1. $ i = s $ 或 $ i = t $;

这时只有一个地方可以放,所以把上面的系数全变成 $ 1 $ 然后相加即可;

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const long long mod = 1e9 + 7;
int n, s, t;
long long f[2005][2005];
int main() {
	freopen("kang.in", "r", stdin);
	freopen("kang.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> s >> t;
	f[1][1] = 1;
	for (int i = 2; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (i == s || i == t) {
				f[i][j] = (f[i - 1][j - 1] + f[i - 1][j]) % mod;
				continue;
			}
			f[i][j] = (f[i][j] + 1ll * (j - (i > s) - (i > t)) * f[i - 1][j - 1] % mod) % mod;
			f[i][j] = (f[i][j] + 1ll * j * f[i - 1][j + 1] % mod) % mod;
		}
	}
	cout << f[n][1];
	return 0;
}

标签:24,赛记,cout,int,cin,long,freopen,include,CSP
From: https://www.cnblogs.com/PeppaEvenPig/p/18372454

相关文章

  • 国内外ChatGPT镜像网站集合【2024-08-21最新】~
     一、GPT4o& &4.0turbo&GPT4omini介绍总有人问我,GPT4o、GPT4.0和GPT3.5有什么区别?国内怎么才能用上,听说很复杂以一张表来表达他们的区别吧GPT3.5、GPT3.5Turbo、GPT4.0均已经被官方放弃维护,也就是说我们其实已经使用不到这几个模型了。目前官方主流开放的模型有GP......
  • 【题解】Solution Set - NOIP2024集训Day12 树上启发式合并
    【题解】SolutionSet-NOIP2024集训Day12树上启发式合并https://www.becoder.com.cn/contest/5472「CF600E」Lomsatgelral直接dsuontree。记录每一个颜色的出现次数。「IOI2011」Race之前是用点分治做的。考虑dsuontree。每个子树内维护到根节点的距离为\(x\)......
  • 2024暑假集训测试30
    前言比赛链接。T1普及了一下异或哈希,T2、T3赛时应该算乱搞题,还搞挂了,T4高级平衡树题,不太可做。原题全部出自:2022牛客OI赛前集训营-提高组(第四场)。T1博弈部分分\(30pts\):\(O(n^2)\)暴力。正解:不难推出必胜策略就是\((x,y)\)路径上每个边权出现的次数不全为......
  • 汇总国内外ChatGPT镜像网站集合【2024-08最新】可无限制使用~
     一、GPT4o& &4.0turbo&GPT4omini介绍总有人问我,GPT4o、GPT4.0和GPT3.5有什么区别?国内怎么才能用上,听说很复杂以一张表来表达他们的区别吧GPT3.5、GPT3.5Turbo、GPT4.0均已经被官方放弃维护,也就是说我们其实已经使用不到这几个模型了。目前官方主流开放的模型有GP......
  • 【教学类-72-02】20240819建筑对称图纸02(图案最大化)
    背景需求【教学类-72-01】20240803建筑对称图纸01-CSDN博客文章浏览阅读423次,点赞13次,收藏5次。【教学类-72-01】20240803建筑对称图纸01https://blog.csdn.net/reasonsummer/article/details/140893003我感觉房子有大有小,有大量空白,我想让建筑变得最大使用以下代码,把房子......
  • 【教学类-76-01】20240820书包01(图案最大化)
    背景需求通义万相生成图片,把图案最大化的方法(切掉白边)【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程-CSDN博客文章浏览阅读1.6k次,点赞56次,收藏17次。【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程https://blog.csdn.net/reasons......
  • ACL 2024奖项公布:华科大破译甲骨文最佳论文之一、GloVe时间检验奖
    为期六天的ACL2024正在泰国曼谷举办。ACL是计算语言学和自然语言处理领域的顶级国际会议,由国际计算语言学协会组织,每年举办一次。一直以来,ACL在NLP领域的学术影响力都位列第一,它也是CCF-A类推荐会议。今年的ACL大会已是第62届,接收了400余篇NLP领域的前沿......
  • 2024年无人系统与自动化控制学术研讨会(ICUSAC 2024, 9月27-29)
    无人系统与自动化控制技术的创新和应用,对于提升国家科技竞争力和产业升级具有重要意义,已成为新时代驱动经济与社会变革的关键要素。为了顺应国家发展趋势,2024年无人系统与自动化控制学术研讨会(ICUSAC2024)将于2024年9月27日至29日在中国沈阳隆重举行。本次大会旨在顺应无......
  • 高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?
    如果有遗漏,评论区告诉我进行补充面试官:使用IOC容器应该注意哪些?我回答:1.理解IOC的基本概念控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明依赖关系,而由容器负责实例化和注入这些依......
  • P10892 SDOI2024 题解
    【题意简述】你有一个数字\(n\),每次操作将\(n/2\),如果\(n\)是一个奇数,你会纠结是向上取整还是向下取整。问你最少纠结多少次。多组数据。【思路】为了方便起见,我们在二进制下重新审视这个题目:在二进制下,一个数除以\(2\)等同于右移一位。默认向下取整,因为右移会舍弃......