首页 > 其他分享 >2024/10/2 CSP-S daimayuan模拟赛复盘

2024/10/2 CSP-S daimayuan模拟赛复盘

时间:2024-10-03 16:22:10浏览次数:7  
标签:dots 10 数字 int daimayuan 整数 2024 leq ll

2024/10/2 CSP-S daimayuan

contest link (Day 7)

A. 序列

题面描述

给你一个序列 \(r_1,r_2,\dots,r_n\),问有多少非负整数序列 \(x_1,x_2,\dots,x_n\) 满足:

  • 对于所有 \(i\),\(0 \leq x_i \leq r_i\)。

  • 满足 \(x_1|x_2|…|x_n=x_1+x_2+⋯+x_n\),左边为二进制或。

输出答案对 \(998244353\) 取模的结果。

输入 & 输出 & 样例 & 数据范围

输入第一行一个整数 \(n\)。

接下来一行,一共 \(n\) 个整数 \(r_1,r_2,\dots,r_n\)。

输出一个整数,表示答案。

对于所有数据,保证 \(1 \leq n \leq 16,0 \leq ri < 260\)。

5
1 2 3 4 5

思路解析

首先考虑将那个按位或的条件转换一下,可以得到条件等价于要求对于所有的 \((i,j)\) 都有 \(x_i \& x_j=0\),相当于我们查看所有 \(x\) 的第 \(k\) 位,只有一个或没有 \(x\) 在当前位上为 \(1\)。有这种想法后我们就可以想数位 dp,但是在二进制数位下。我们在常规的数位 dp 下需要记录是否有顶头,这里同理,但是需要记录 \(n\) 个元素的信息,因为 \(n\) 的范围较小,用状压存储即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 18, M = 64;
const ll P = 998244353;
ll n, r[N], f[2][1 << N];
int g(ll x, int y) {
	return (x >> y) & 1; 
}
int main() {
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> r[i];
	f[63 & 1][0] = 1;
	for(int i = 62; i >= 0; i--) {
		for(int j = 0; j < (1 << n); j++) f[i & 1][j] = 0;
		for(int j = 0; j < (1 << n); j++) {
			int tmp = 0;
			for(int k = 1; k <= n; k++) {
				if(g(j, k - 1) || g(r[k], i)) tmp += (1 << (k - 1));
			}
			f[i & 1][tmp] += f[(i + 1) & 1][j];
			for(int k = 1; k <= n; k++) {
				int top = ((g(j, k - 1) || g(r[k], i)) ? 1 : 0);
				if(g(j, k - 1) || g(r[k], i)) {
					int now = ((tmp ^ (1 << (k - 1))) | ((g(j, k - 1)) << (k - 1)));
					f[i & 1][now] += f[(i + 1) & 1][j]; f[i & 1][now] %= P;
				}
			}
		}
	}
	ll ans = 0;
	for(int j = 0; j < (1 << n); j++) ans = (ans + f[0][j]) % P;
	cout << ans;
	return 0;
}

B. 合并数字

题面描述

有 \(n\) 个数字,\(a_1,a_2,\dots,a_n\)。每次可以选择两个数字 \(x,y\) 删除,然后加入数字 \(K−x−y\)。\(n−1\) 轮之后只剩下一个数字,问最后剩下的数字最大可能是多少?

你要对 \(q\) 个不同的 \(K\) 进行回答。每组询问独立,都是对于一开始的序列操作。

输入第一行两个整数 \(n,q\)。

接下来一行 \(n\) 个整数 \(a_1,a_2,\dots,a_n\)。

接下来一行 \(q\) 个整数 \(K_1,K_2,\dots,K_q\),表示每次询问的值。

输出一共 \(q\) 行,每行一个整数,表示答案。

标签:dots,10,数字,int,daimayuan,整数,2024,leq,ll
From: https://www.cnblogs.com/2020luke/p/18445685

相关文章

  • CF1051F题解
    传送门:https://codeforces.com/problemset/problem/1051/F注意到\(m-n\le20\),求一个连通图中任意两点间最短路,我们不难想到将问题转换到树上。先求出树的任意一颗生成树,此时倍增或者树刨能轻松算出仅含树边的最小路径。而对于非树边,从边的角度显然很难做到,我们不妨从点的角度思......
  • 2024.9.20
    周一smkThe2024ICPCAsiaECRegionalsOnlineContest(II)补题AFG逆元fzb补题xmq忘了()周二smkThe2024ICPCAsiaECRegionalsOnlineContest(II)补题IJfzbThe2ndUniversalCup.Stage1:Qingdao补题xmq最小生成树模拟周三smkThe202......
  • 10月份模拟赛总结
    2024.10.3:能够感受到出题人深深的恶意,扔了道zak没场切的交互,甚至2e5的输出关同步流被卡了。A:一共只有$25n$种本质不同的操作,不妨求出每种操作后的新串的平方子串个数,最后取其中最大值即可。跨过它们的平方子串(包括修改后新生成的)的贡献。记$L=\min(LCS(a,b),l......
  • GoogLeNet训练CIFAR10[Pytorch+训练信息+.pth文件]
    0引言GoogLeNet,它是一种深度卷积神经网络,由Google研究人员在2014年提出,用于图像识别任务。CIFAR-10是一个常用的图像识别数据集,包含10个类别,每个类别有6000张32x32的彩色图像。本文使用Pycharm及Pytorch框架搭建GoogLeNet神经网络框架,使用CIFAR10数据集训练模型。笔者查阅资......
  • 闲话 10.2
    你说的对,以前假期比上不足比下有余,现在没有下了。10.1上午的唐氏模拟赛,忙活一上午只有55pts,还因为T4freopen开错了挂15pts。T1感觉哪里很对但很怪,死活调不出来大样例三,于是两个小时就摆了,结果大败而归,事实上将我初版代码改一个地方就是正解,纯属南辕北辙还没走到头。看......
  • 代码随想录算法训练营 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次
    122.买卖股票的最佳时机II题目链接:122.买卖股票的最佳时机II文档讲解︰代码随想录(programmercarl.com)视频讲解︰买卖股票的最佳时机II日期:2024-10-03想法:本来还在想什么时候买股票,结果只需要考虑每天的正收益累加就是最大的收益了。Java代码如下:classSolution{public......
  • 10.3数据结构
    二叉树表示与储存:parlchrch二叉树遍历:前序,中序,后序遍历先序遍历先根、左子树、右子树中序遍历左子树、根、右子树后序遍历左子树、右子树、根无根树的遍历......
  • P11119 [ROI 2024 Day 2] 保持连接
    P11119[ROI2024Day2]保持连接设\(L_i,R_i\)分别表示覆盖了\(i\)的的线段中最靠左的左端点和最靠右的右端点,特殊的,如果没有覆盖,则\(L_i=R_i=i\)。显然所有\(R_i\)就刻画了一种局面。如果没有\(X\)的操作,设\(g_i\)表示从\(i\)出发到\([i,n]\)的重新连接的次数......
  • 2024秋季个人阅读计划
    本学期计划阅读三本书,分别为《代码大全》、《人件集》和《用户故事与敏捷方法》,以下我本学期的阅读计划第4周:阅读:《代码大全》第1-3章阅读笔记1:10月4日第5周:阅读:《代码大全》第4-6章阅读笔记2:10月11日第6周:阅读:《代码大全》第7-10章阅读笔记3:10月18日第7周:阅读:......
  • 微软推送Windows 11 2024更新:新增多项AI体验 NPU终于有了用武之地
    10月3日消息,近日,微软开始向广大用户全面推送Windows112024更新。其实按照惯例应被成为Windows1124H2更新,但由于微软放弃了以往1年2次重大版本更新周期,整个2024年只更新了这一个大版本,因此被设定为“Windows112024更新”。2024更新包含了Windows11中许多小而实用的新增......