2021 CCPC 威海站 VP记录(题解)
2021 CCPC 威海站 VP记录(题解)
题目顺序为vp时开题顺序:
A - Goodbye, Ziyin!
签到,连边数小于等于2的可以作为二叉树根,若有大于4的直接输出0。
code:
void solve(){
int n;
cin >> n;
map<int,int> cnt;
for (int i = 0;i < n - 1;i ++) {
int x,y;
cin >> x >> y;
cnt[x]++;
cnt[y]++;
}
int ans = 0;
for (auto [u,v] : cnt) {
if(v >= 4) {
cout << 0 << endl;
return ;
}
else if(v <= 2) ans++;
}
cout << ans << endl;
}
J - Circular Billiard Table
分析:每次碰撞圆心角不会改变,根据这个性质,可以推出回到原点时一定走过了\(360^{\circ}\)的倍数,可以推出公式(代码来自队友)
code:
void car()
{
a*=2;
ll c=360*b;
ll d=c/__gcd(c,a)*a;
cout<<d/a-1<<endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin>>t;
while(t--)
{
cin>>a>>b;
car();
}
cerr<<endl<<"carnation13"<<endl;
return 0;
}
M 810975
题意:n局游戏,赢了m场,连胜最多为k场,求最后方案数
分析:典型隔板法,如果没有连胜最多为k场这个条件,就是经典公式了\(ans = \binom{n - m}{n + m - 1}\)(发现离散学的这个公式蛮方便的)。解释下这个公式,其实就是隔板放球的模型,把赢得局想成球,输的局想成板,那就是\(n + m -1\)个地方放\(n - m\)个板(可重复组合问题)。
然后为了满足最多连胜为k场,在vp的时候和队友推了下感觉正推不好做,于是可以想到用容斥去算出来不合法的方案数,最后用总方案数减去不合法的方案数即可。
考虑不合法的方案数,我们可以这么考虑,有\(n - m + 1\)段是连胜的区间,那我们可以类似于devu和鲜花那题,把每一段恰好为\(k + 1\)的情况给算出来容斥掉,就是最后的答案了。
所以公式为:
\]
稍微解释一下,这里的\(i\)表示\(n + + m - 1\)段连胜段里选取\(i\)段,且这\(i\)段正好为连胜\(k + 1\)场的情况。
然后这个公式对应的是连胜最多场数小于等于\(k\)场的情况,减去小于等于\(k-1\)的方案数就是最后答案啦
int cal(int n,int m,int k) {
int res = 0;
res = C(n + m - 1,n - m);
int neg = 1;
for (int i = 0;i <= n - m + 1;i ++) {
// if(i * (k + 1) >= m) break;
res = (res + neg * C(n - m + 1 , i) % mod * C(n - i * (k + 1),n - m) % mod) % mod;
res = (res + mod) % mod;
neg = -neg;
}
return res;
}
void solve(){
int n,m,k;
cin >> n >> m >> k;
int ans = 0;
if(n < m || k > m) {
cout << 0 << endl;
return ;
}
ans = cal(n,m,k) - cal(n,m,k - 1);
ans = (ans % mod + mod) % mod;
cout << ans << endl;
}
G - Shinyruo and KFC
分析:非常明显的暴力题,题目限定了数据范围是所有数总和小于等于2e5,所以他肯定是两种情况,要么最大的数特别大,前面的都不用算,要么是最大的数不太大,会变成有点类似于分块的处理方法。在同一块内的组合数一起算掉就可以了(这其实是我赛场口胡的,队友听完后打了一个桶思想的代码顺利ac,可能直接看大佬队友的代码就可以了)
code:
signed main(){
init();
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>q>>w;
for(i=1;i<=q;i++)
{
cin>>f[i];
ton[f[i]]++;
}
sort(f+1,f+1+q);
for(i=1;i<=q;i++)
{
if(f[i]!=f[i-1])
cnt++;
g[cnt]=f[i];
}
maxn=min(g[cnt],w);
for(i=1;i<maxn;i++) cout<<0<<endl;
for(i=maxn;i<=w;i++)
{
ans=1;
for(int j=1;j<=cnt;j++)
{
//cout<<i<<" "<<f[j]<<" "<<C(i,f[j])<<endl;
ans=ans*qmi(C(i,g[j]),ton[g[j]])%mod;
}
cout<<ans<<endl;
}
}
D - Period
分析:哈希暴力水题,我队因为一直在想kmp做法一直wa(字符串确实不太会),后来发现暴力hash即可,没啥好说的看代码(来自队友)吧qwq(过的人第三多的签到题了)
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long unsigned ll;
#define rep(i,a,b) for(ll i=a;i<=b;++i)
#define per(i,a,b) for(ll i=a;i>=b;--i)
const ll N=1000005,base=131,mod=212370440130137957ll;
ll n,m,k,q,now=0,c[N];
char s[N];
signed main()
{
//ios::sync_with_stdio(false);
scanf("%s",s+1);
n=strlen(s+1);
ll a=0,b=0,w=1;
for(ll i=1;i<=n;++i)
{
a=(a*base+s[i]);
//cout<<a<<" ";
b=((w*s[n-i+1])+b);
w=(w*base);
//cout<<b<<endl;
if(a==b)c[i]=++now;
else c[i]=now;
}
//for(ll i=1;i<=n;++i)cout<<c[i]<<" ";cout<<endl;
scanf("%lld",&q);
for(ll i=1;i<=q;++i)
{
ll x;
scanf("%lld",&x);
ll mi=min(x,n-x+1)-1;
printf("%lld\n",c[mi]);
}
//cerr<<endl<<"carnation13"<<endl;
return 0;
}
总结:新队伍的第二场vp,比上一场签完到就各种痛苦wa不会写的情况要好一点,五题其实是在三个小时多点的时候完成的,如果是实际比赛可能能出更多的题(可能吧),这个赛季加油了。
2021 CCPC 威海站 VP记录(题解)的更多相关文章
- 2018 CCPC 吉林站 H Lovers
2018 CCPC 吉林站 H Lovers 传送门:https://www.spoj.com/problems/LIS2/en/ 题意: q次操作 1.将第l~r个数的左边和和右边都加上一个数d, ...
- ccpc杭州站 赛后总结
Ccpc杭州站赛后总结 2017年11月4号五号,我参加了ccpc杭州站的比赛,我的队友是聂少飞和王艳,在4号一点半,举行了比赛开幕式,听着教练代表的发言,听着参赛选手代表的发言,听着志愿者的发言,都 ...
- 2018 CCPC 桂林站(upc复现赛)补题
2018 CCPC 桂林站(upc复现赛)补题 G.Greatest Common Divisor(思维) 求相邻数的差值的gcd,对gcd分解素因子,对所有的素因子做一次遍历,找出最小答案. 几个样 ...
- 2021 DevOpsDays 东京站完美收官 | CODING 专家受邀分享最新技术资讯
DevOpsDays 是一个全球知名的系列技术会议品牌,内容涵盖了软件开发.自动化.测试.安全.组织文化以及 IT 运营的社区会议等.DevOpsDays 由 DevOps 之父 Patrick De ...
- 2021.07.02 P1383 高级打字机题解(可持久化平衡树)
2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...
- 2017 CCPC 哈尔滨站 题解
题目链接 2017 CCPC Harbin Problem A Problem B Problem D Problem F Problem L 考虑二分答案. 设当前待验证的答案为x 我们可以把第二 ...
- HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)
题目链接 2017 CCPC Harbin Problem K 题意 给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...
- 和jz姐姐的vp记录
即使如此,jz姐姐也漂亮的取得了胜利 有些懒得写直接口胡,所以代码也不一定有 暂时停更了 2015-2016 Petrozavodsk Winter Training Camp, Makoto rng ...
- CCPC 2020 长春站 部分简略题解
gym链接:CCPC 2020 changchun site A: 题目大意:商店里有若干个充值档位和首充奖励,你有\(n\)块钱问最多能拿到多少水. 解:由于档位不多可以直接枚举,整个二进制枚举一下 ...
随机推荐
- mac下安装YII
新换了台电脑,一个mac,特蛋疼的各种环境安装.两个多小时,总算把开发环境配好了. XAMPP就不用说了,phpstorm(javaEE 6.0),navicat for mysql ,一堆的注册码, ...
- 并发刺客(False Sharing)——并发程序的隐藏杀手
并发刺客(False Sharing)--并发程序的隐藏杀手 前言 前段时间在各种社交平台"雪糕刺客"这个词比较火,简单的来说就是雪糕的价格非常高!其实在并发程序当中也有一个刺客, ...
- Serverless之Knative部署应用实例;
1.什么是Knative? Knative是Google2018的Google Cloud Next大会上发布的一款基于kubernetes的Serverless框架. knative的目的是在kub ...
- 5.8 NOI 模拟
\(T1\) 比较容易想到的 二分转化为判定,判定是否存在一个子图能保证能一直在\(x\)时间内到达\(n\) 设\(dis(u,v)\)表示\(u->v\)的最短路 先找出候选节点\(i,di ...
- "蔚来杯"2022牛客暑期多校训练营9 G Magic Spells【马拉车+哈希】
四川今天又上热搜了,继南部疫情的未雨绸缪后,龙槽沟是真的倾盆大雨了.我没有兴趣虚伪矫情地对罹难的游人表达同情,因为人与人互不相通徒增谈资:我也没有兴趣居高临下地对擅闯的愚人表达不屑,因为你我皆为乌合之 ...
- 非常全的一份Python爬虫的Xpath博文
非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...
- 数据库简介与MySQL简介
MySQL简介 数据存取演变史 起源······文本文件 在最开始使用计算机都没有相应的规范我们的数据一般都是自己起一个名字然后就根据这个路径存储数据并且存储数据的格式也都五花八门就产生了很多奇奇怪怪 ...
- 【Swift】从零开始的Swift语言学习笔记-1:前言&Hello World
该系列分为两个大的部分. Swift基本语法 使用Xcode编写iOS应用程式 两个部分会双线并行更新. 本人的学习资料大多为Apple Develop官方上的生肉,难免会有疏漏,望斧正. 另外该系列 ...
- 用metasploit映射公网远程控制舍友电脑
用metasploit映射公网远程控制舍友电脑 Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正 ...
- kingbaseES R3 集群修改data路径测试案例
案例说明: 默认KingbaseES R3集群部署后,数据存储目录(data)在/home/kingbase下,部署时不能更改:本案例是在部署完成后,迁移data目录到其他指定的存储位置. 数据库版本 ...