CF-925(已更新:D-F)
CF 925
补题ing 待更新
后面打算更新D题和power oj上一道区间合并的题(现在才知道是一道洛谷上的原题……)
D
分析
涉及到关于取模的知识,我们的答案要满足三个条件:
- ai-aj≡0(MOD y);
- ai+aj≡0(MOD x);
- 1<=i<j<=n;
1.容易想到ai%y=aj%y,2.等价于(ai%x+aj%x)%x=0。由这两个式子和第三个条件我们应该思考,如何将i,j分别移到等式两边,这样才方便我们处理。由模数的性质可知,ai%x+aj%x的结果要么为0要么为x,所以我们直观的想到:ai%x的结果要么为-aj%x要么为x-aj%x,又ai,aj,x都为正数,第一种结果意味着ai%x=aj%x=0,我们将其与第二种结果合并,ai%x=0=x-aj%x=x,等式不成立,而在右边模上x,即变为3.ai%x=(x-aj%x)%x则会使等式成立;但是,所谓等式,意味着我们要证明3式不会与第二种结果相悖。把ai%x=x-aj%x左右两边都模上x,因为ai%x%x=ai%x,x-aj%x也为小于x的数,故化为ai%x=(x-aj%x)%x,即3式能同时满足两个结果。
操作
对于每个ai,我们设aa=ai%x,bb=ai%y,因为i<j,遍历时先把答案的个数cnt加上集合{bb,(x-aa)%x}的个数,再用存下集合{bb,aa},这里我用的是map实现。
代码
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t,n,x,y;cin>>t;
while(t--){
cin>>n>>x>>y;
int a,cnt=0;
map<pair<int,int>,int>mp;
for(int i=1;i<=n;i++){
cin>>a;
int aa=a%x,bb=a%y;
cnt+=mp[{bb,(x-aa)%x}];
mp[{bb,aa}]++;
}
cout<<cnt<<endl;
}
return 0;
}
E
分析
手写的模拟过程
博弈论加贪心,实际上后手得到的答案只看其位数是否大于m,先手的倒置是把后缀0的个数从位数减去,而后手可以通过合并使后缀0不存在,所以对先手而言,只消每轮删去后缀0个数最多的,而后手同样选一个后缀0最多的跟一个没有后缀0的合并(因为先手操作过,这种数一定存在),使其没有后缀0,这样它被倒置也不会减少位数,也就是这样可以使后手得到的位数员供献最少,这也是后手的最佳方案
比如5550 20 300
先手的操作一定是300先,这样对他收益大,5550和20的只能操作一个,但对后手没有影响,因为它们后缀0个数一样。
操作
所以可以把数遍历一下,统计位数还有后缀0个数,按后缀0个数从大到小排,奇数位上的都被先手操作过,所以最后后手得到的数的位数就是初始位数-奇数位后缀0个数,再用这个跟m比较,严格大于才是后手胜,否则是先手胜。
如 1 2007 800 1580
排序后为 800 1580 2007 1 (后两个可颠倒顺序)
代码
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
const int N=2e5+5;
int a[N],b[N];//b数组统计后缀0个数
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t,n,m,x,y;cin>>t;
while(t--){
cin>>n>>m;
int cnt=0;//统计位数
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=0;
}
for(int i=1;i<=n;i++){
//注意两个while的顺序
while(a[i]%10==0){
a[i]/=10;
b[i]++;
cnt++;
}
while(a[i]){
a[i]/=10;
cnt++;
}
}
sort(b+1,b+n+1,[](int a,int b){
return a>b;
});
for(int i=1;i<=n;i+=2){
cnt-=b[i];//先手总操作奇数位
}
if(cnt>m) cout<<"Sasha";
else cout<<"Anna";
cout<<endl;
}
return 0;
}
[F](Problem - F - Codeforces)
分析
每个参与者都把自己排在最前面,因此我们找相对顺序时可以不管第一个。
1 2 3 4 2<-3<-4
2 3 1 4 3<-1<-4
3 2 1 4 2<-1<-4
4 2 3 1 2<-3<-1由此可构造拓扑序
操作
对k个顺序的第2到n个依次建边,求拓扑序是否存在,即是否满足cnt=n
代码
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int N=2e5+5;
int a[N],rd[N],n,cnt;
vector<int>e[N];
bool tuopu(){
//这里可以就用普通队列
priority_queue<int,vector<int>,greater<int>>q;
cnt=0;
for(int i=1;i<=n;i++){
if(rd[i]==0) q.push(i);
}
while(!q.empty()){
int x=q.top();
q.pop();
for(auto t:e[x]){
rd[t]--;
if(rd[t]==0) q.push(t);
}
cnt++;
}
return cnt==n;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t,x,k,ans=0;cin>>t;
while(t--){
cin>>n>>k;
//注意用memset初始化会t
for(int i=1;i<=n;i++){
e[i].clear();
rd[i]=0;
}
while(k--){
for(int i=1;i<=n;i++){
cin>>a[i];
if(i>=3){
e[a[i]].push_back(a[i-1]);
rd[a[i-1]]++;
}
}
}
if(tuopu()){
cout<<"YES";
}
else cout<<"NO";
cout<<endl;
}
return 0;
}
CF-925(已更新:D-F)的更多相关文章
- intellij idea 13&14 插件推荐及快速上手建议 (已更新!)
原文:intellij idea 13&14 插件推荐及快速上手建议 (已更新!) 早些年 在外企的时候,公司用的是intellij idea ,当时也是从eclipse.MyEclipse转 ...
- SRM12 T2夏令营(分治优化DP+主席树 (已更新NKlogN)/ 线段树优化DP)
先写出朴素的DP方程f[i][j]=f[k][j-1]+h[k+1][i] {k<i}(h表示[k+1,j]有几个不同的数) 显然时间空间复杂度都无法承受 仔细想想可以发现对于一个点 i ...
- 微信快速开发框架(九)-- V3.0发布,代码已更新至Github 新增微店功能
版本内容 1.修正了缺少对Event.View的支持 2.增加了用户UnionID 3.新增微信小店功能 4.多客服功能 5.单元测试 什么是UnionID 我们知道,每个用户针对一个微信公众账号都有 ...
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
- 微信快速开发框架(七)--发送客服信息,版本更新至V2.2 代码已更新至github
在V2版本发布的博文中,已经介绍了大多数Api的用法,同时也收到了很多意见,其中发布了几个修正版本,修改了几个bug,在此感谢大家的使用,有了大家的支持,相信快速开发框架会越来越好,也会越来越完善的. ...
- 目录 of 2013-2014-1(内容已更新结束)
(内容已更新结束) UML部分: ---------------1.概述2.用例图3.类图4.顺序图 MVC部分: ----------------1.概述2.路由3.控制器4.视图5.模型6.安装部 ...
- Asky极简教程:零基础1小时学编程,已更新前8节
Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...
- 【sql server】"已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行" 解决方案
#事故现场: 1.在手动修改某表中数据是,出现如下错误提示: 已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行 2.表结构及数据: #解决方法: 1.原因分析:提示被删除的行不是唯一行, ...
- 【干货】电路设计师指导手册(已更新完毕)(转载EDN)
[干货]电路设计师指导手册(已更新完毕) 第一部分:接地与布线第二部分:电源返回路径与I/O信号接地第三部分:板间互连.星形接地及屏蔽第四部分:安全地以及电线/电缆第五部分:射频电缆.双绞线与串扰
- 激活windows10(已更新工具)
激活windows10 1.用cmd命令: 自己动手,KMS激活win10 2016 长期服务版.步骤如下:命令提示符(管理员),依次输入以下3条命令 slmgr /ipk DCPHK-NFMTC-H ...
随机推荐
- RLHF · PbRL | QPA:选择 near on-policy query,加速 policy learning 收敛速度
论文题目:Query-Policy Misalignment in Preference-Based Reinforcement Learning,ICLR 2023 Spotlight(8 6 6) ...
- 为R Markdown配置TinyTex编译环境
技术背景 在前面一篇博客中,我们介绍了一些关于在Windows系统上安装R Studio来编写R Markdown,最后编译成Beamer的演示文档的过程.而在Windows系统的使用过程中发现,编译 ...
- SV 数据类型
system verilog可以用于设计也可以进行验证 语法规则 SV新数据类型 SV数据类型 bit - 0-255 byte - -127 - 128 # 快速进行sv文件仿真 VCS -R -s ...
- SD Host控制器微架构设计
微架构设计思路 ahb_slave_if中的寄存器可以在datasheet中进行描述 sd_clk - 时钟产生模块的接口描述 sd_data_fsm和sd_cmd_fsm - 状态机描述 发送时序需 ...
- MyBatis——第一个程序
MyBatis1:初识 MyBatis第一个程序 流程:搭建环境–>导入MyBatis–>编写代码–>测试 1.创建一张User表. 关键字id.username.pwd 2.导入相 ...
- GoMusic-歌单迁移工具网站 一键迁移网易云/QQ音乐歌单至 Apple/Youtube/Spotify Music
GoMusic是什么: GoMusic是一个在线歌单迁移工具网站,帮助用户一键迁移网易云/QQ音乐歌单至 Apple/Youtube/Spotify Music,直接输入歌单链接,复制查询结果,打开 ...
- [转帖]PostgreSQL数据库的版本历史及关键变化
https://cloud.tencent.com/developer/article/2311843 举报 PostgreSQL是一个强大的开源关系型数据库,它的发展历程充满了创新和卓越的设计.让我 ...
- [转帖]网站开启 IPv6 的三种方式
https://zhuanlan.zhihu.com/p/443835798 从传统二进制部署的 Nginx ,到云原生部署的 K8S.Istio,分别介绍网站开启 IPv6 的三种方式. 1.Ngi ...
- [转帖]AMD Zen4 霄龙 9004 转战嵌入式:192 框框无敌!秒杀对手 80%
http://www.myzaker.com/article/64104f50b15ec02eb10eb659 其实,它就是把此前用于服务器.数据中心的霄龙 9004 系列的部分型号拿了过来,命名.规 ...
- [转帖]NOHZ = ON如何影响Linux内核中的do_timer()?
https://www.jb51.cc/faq/897483.html 如何解决NOHZ = ON如何影响Linux内核中的do_timer()?? 首先,让我们了解什么是tickless kerne ...