清华大学学生程序设计竞赛暨高校邀请赛(THUPC)2023 - 初赛(待补题)

本文主要是介绍清华大学学生程序设计竞赛暨高校邀请赛(THUPC)2023 - 初赛(待补题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

心得

看题跟榜比较无力,最终5h4题罚坐

M. 世界杯

输出China即可

K. 众数(前缀和)

68fb347602bb4baf9a5ff0b46b19cca7.png

最优策略是先取最大的数x,设其出现次数为cnt[x],

然后把小于x的数y每个取min(cnt[y],cnt[x]),

下一轮再取剩下的最大的数x,重复这个过程,直至所有数都取完

由于前缀是一定要取的,后缀一定会取完,

所以,维护前缀和、前缀已经取了多少个数即可,统计每个数的贡献

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int n,a[N],b[N],pos[N];
ll ans,now,sum[N],del;
ll cal(int x,int v){return 1ll*(n-x)*v+sum[x];
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%d",&a[i]);b[i]=a[i];}sort(b+1,b+n+1);for(int i=1;i<=n;++i){sum[i]=sum[i-1]+b[i];}for(int i=1;i<=n;++i){pos[i]=upper_bound(b+1,b+n+1,a[i])-b;pos[i]--;//printf("i:%d pos:%d cal:%lld\n",i,pos[i],cal(pos[i],a[i]));}for(int i=n;i>=1;--i){if(a[i]<=now)continue;now=a[i];ans+=1ll*i*(cal(pos[i],a[i])-del);//printf("now:%lld cal:%lld del:%lld add:%lld\n",now,cal(pos[i],a[i]),del,1ll*now*(cal(pos[i],a[i])-del)*a[i]);del=cal(pos[i],a[i]);//printf("i:%d now:%lld pos:%d sum:%lld add:%lld\n",i,now,pos[i],sum[pos[i]],1ll*now*pos[i]*a[i]);}printf("%lld\n",ans);return 0;
}

A.大富翁(树上博弈)

51f35c15225243e493bd1dd72777003f.png

33a9e499cf29453e82001d5dc2d3ec1f.png

 注意到,若a是b的祖先,则a支配b,

a和b被不同的人选时,选a的人+1,选b的人-1,

而若被相同的人选时,选a的人+1,选b的人-1,也恰能抵消为0

所以,每个点贡献独立,

点u赚的游戏币=子树点的个数sz[u]-它的深度d[u](即祖先点的个数)-支付游戏币的个数w[u]

而双方都是为了花的少赚得多的最优策略,

所以奇偶选取,统计先手赚取的金额即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
vector<int>e[N];
int n,fa,w[N],a[N],sz[N],my,you;
ll ans;
void dfs(int u,int d){a[u]=-w[u]-d;sz[u]=1;for(auto &v:e[u]){dfs(v,d+1);sz[u]+=sz[v];}a[u]+=sz[u]-1;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%d",&w[i]);}for(int i=2;i<=n;++i){scanf("%d",&fa);e[fa].push_back(i);}dfs(1,0);sort(a+1,a+n+1,greater<int>());for(int i=1;i<=n;++i){if(i&1)ans+=a[i];}printf("%lld\n",ans);return 0;
}

I. 欺诈游戏(博弈&概率/纳什均衡)

8961b7121dc84cc79e9b7366cf8f6449.png

 事实上,如果画一张表格,

走私者概率\检察官概率w0w1
p0×1/2
p11×

以不同角色的视角,合并同类项,

把一方看做是变量时,其余所有看作是常量

 

对于走私者来说,收益形如gif.latex?%5Csum%20p_%7Bi%7D*%5Csum%20x_%7B%28i%2Cj%29%7Dw_%7Bj%7D

此时,对于检察官来说,令n个系数gif.latex?%5Csum%20x_%7B%28i%2Cj%29%7Dw_%7Bj%7D都相同,

即走私者不管怎么选择,走私者都只能获得固定收益,

检察官达到了使对方利益最小化的目的(不存在比这大的可能性)

 

对于检察官来说,收益形如gif.latex?%5Csum%20w_%7Bi%7D*%5Csum%20x_%7B%28i%2Cj%29%7Dp_%7Bj%7D

此时,对于走私者来说,令n个系数gif.latex?%5Csum%20x_%7B%28i%2Cj%29%7Dp_%7Bj%7D都相同, 

即检察官不管怎么选择,走私者都只能获得固定收益,

走私者达到了自己利益最大化的目的(不存在比这小的可能性)

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10,mod=998244353;
int n,p[N],w[N],sump,sumw,is,ip,inv[N];
int modpow(int x,int n,int mod){int res=1;for(;n;n>>=1,x=1ll*x*x%mod){if(n&1)res=1ll*res*x%mod;}return res;
}
void init(){inv[1]=1;for(int i=2;i<N;i++){inv[i]=1ll*inv[mod%i]*(mod-mod/i)%mod;}
}
int main(){scanf("%d",&n);//assert(1<=n && n<=400000);init();w[0]=1;for(int i=0;i<=n;++i){w[i+1]=(sumw+1ll*(i+1)*w[i]%mod)%mod;w[i+1]=2ll*w[i+1]%mod;w[i+1]=1ll*w[i+1]*inv[i+1]%mod;sumw=(sumw+w[i])%mod;}/*p[0]=1;p[1]=modpow(2,mod-2,mod);sump=p[0];for(int i=1;i<=n;++i){p[i+1]=1ll*inv[2]*sump%mod;p[i+1]=(p[i+1]+1ll*(i+1)*inv[2]%mod*p[i]%mod)%mod;p[i+1]=1ll*inv[i]*p[i+1]%mod;sump=(sump+p[i])%mod;}*///ip=modpow(sump,mod-2,mod);is=modpow(sumw,mod-2,mod);//printf("1/8:%d 2/8:%d\n",modpow(8,mod-2,mod),modpow(4,mod-2,mod));//assert(sum!=0);//printf("sum:%d is:%d\n",sum,is);ip=inv[n+2];for(int i=0;i<=n;++i){if(i==0)p[i]=2ll*ip%mod;else p[i]=ip;printf("%d%c",p[i]," \n"[i==n]);}for(int i=0;i<=n;++i){w[i]=1ll*w[i]*is%mod;printf("%d%c",w[i]," \n"[i==n]);}return 0;
}

 

 

这篇关于清华大学学生程序设计竞赛暨高校邀请赛(THUPC)2023 - 初赛(待补题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194989

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

家庭和学生用户笔记本电脑配置方案

2.6.1  家庭和学生用户笔记本电脑配置方案   2.6.1  家庭和学生用户笔记本电脑配置方案   普通家庭用户、学生用户主要用于上网、娱乐、学习等,这类用户要求笔记本电脑的各方面 功能比较均衡。在选购此类笔记本电脑时,主要考虑外观设计方面要比较时尚,而且性能上也要 够强,一些大型复杂的软件以及目前的主流游戏都要能够流畅地运行才行。   对于CPU方面,可以考虑目前主流的第二

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和