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 ...
随机推荐
- 01_设计一个有getMin功能的栈
01_设计一个有getMin功能的栈 [题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] pop.push.getMin操作的时间复杂度都是O(1) 设计 ...
- 【Spring 5核心原理】1设计模式
1.1开闭原则 开闭原则(open-closed principle,OCP)是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭.所谓的开闭,也正是对扩展和修改两个行为的一个原则. 强调用 ...
- [转帖]金仓数据库KingbaseES数据目录结构
KingbaseES数据库结构 [kingbase@postgresV8]$ tree -LP2data/ . ├── data │ ├── base # 存储用户创建的数据库文件及隶属于用户数据库的 ...
- 【转帖】Linux 系统双网卡绑定 bond的7种模式
第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)第二种模式:mod=1,即: (active-backup) Active-backup ...
- [转帖]通过架设Cockpit服务 使用Web浏览器监测管理多个Linux服务器
Cockpit是一个易于使用,轻量级和简单但功能强大的工具,通过单个Web浏览器监视和管理多个远程Linux服务器. 如果你管理着一台 Linux 服务器,那么你可能正在寻找一个可靠的管理工具.为了这 ...
- ARM下KVM虚拟化的损耗验证--redis
ARM下KVM虚拟化的损耗验证 摘要 看Windows 上面的 Workstation的虚拟机的 网络层的延迟特别高. 突然想之前统计都是直接在本地验证的, 只考虑了虚拟化CPU的性能损耗 没有考虑虚 ...
- iptables 命令学习
iptables 命令学习 摘要 Linux 早起版本使用netfilter进行数据包过滤. 最新的版本开始改用 ebpf的方式进行内核编程式的包过滤. netfilter 可以理解为内核态的一个处理 ...
- [转帖]关于iostat的问题,svctm数据不可信
使用FIO对磁盘进行压力测试,使用1个线程对磁盘进行随机读,设置单次read的数据块分别为128KB和1M,数据如下: (1)单次IO数据块为128KB (2)单次IO数据块为1M 从上面的数据可以看 ...
- 神经网络优化篇:详解超参数调试的实践:Pandas VS Caviar(Hyperparameters tuning in practice: Pandas vs. Caviar)
超参数调试的实践 如今的深度学习已经应用到许多不同的领域,某个应用领域的超参数设定,有可能通用于另一领域,不同的应用领域出现相互交融.比如,曾经看到过计算机视觉领域中涌现的巧妙方法,比如说Confon ...
- 记一次JSF异步调用引起的接口可用率降低
前言 本文记录了由于JSF异步调用超时引起的接口可用率降低问题的排查过程,主要介绍了排查思路和JSF异步调用的流程,希望可以帮助大家了解JSF的异步调用原理以及提供一些问题排查思路.本文分析的JSF源 ...
