【比赛记录】8.21 div2
A
选择一个点\(B(x,0)\)使得\(|dis(A,B)-x|=k.\)
题目实际上就是找到一个最接近\(n\)的数,使得它可以分成两个数\(a,b,\)使\(a-b=k.\)
我们考虑先分成一个可能的最小的数:\(0+k.\)这时两边\(+2\)就可以保证一定可以分成两个数\(a,b\)使得\(a-b=k.\)
那么我们直接对\(n-k\)的奇偶性讨论即可。如果\(k>n\)直接输出\(k-n\)即可。
#include<bits/stdc++.h>
using namespace std;
int T,n,k;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&k);
if(k>n)printf("%d\n",k-n);
else{
if((n-k)&1)puts("1");
else puts("0");
}
}
return 0;
}
B
考虑贪心:\(a\)中的\(2\)先消耗\(b\)中的\(1,\)剩下的用\(a\)中的\(0\)尽量消耗。剩下的\(a\)中的\(1\)和\(b\)中的\(2\)匹配即可。
#include<bits/stdc++.h>
using namespace std;
int T;
int a[4],b[4];
int main(){
scanf("%d",&T);
while(T--){
int ans=0;
scanf("%d%d%d",&a[0],&a[1],&a[2]);
scanf("%d%d%d",&b[0],&b[1],&b[2]);
int num=min(a[2],b[1]);
ans+=2*num;a[2]-=num,b[1]-=num;
num=min(a[0],b[2]);a[0]-=num,b[2]-=num;
num=min(a[0],b[1]);a[0]-=num,b[1]-=num;
num=min(a[0],b[0]);a[0]-=num,b[0]-=num;
//a[0]finish
num=min(a[1],b[1]);a[1]-=num;b[1]-=num;
num=min(a[1],b[0]);a[1]-=num,b[0]-=num;
num=min(a[2],b[2]);a[2]-=num;b[2]-=num;
num=min(a[1],b[2]);ans-=num*2,a[1]-=num,b[2]-=num;
cout<<ans<<endl;
}
return 0;
}
C
由于题目中说的是最大公约数的序列中的最小数,且不会改变数字。所以,我们直接把可以换位置的数提出来,排好序再插进去,看看操作完的序列是不是单调不降序列即可。
#include<bits/stdc++.h>
using namespace std;
int T,n,a[200010],vis[200010];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
int fg=0,mi=(1<<30);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
mi=min(mi,a[i]);
}
for(int i=2;i<=n;++i){
if(a[i]<a[i-1]){
fg=1;
break;
}
}
if(!fg){
puts("YES");
for(int i=1;i<=n;++i)vis[i]=a[i]=0;
continue;
}
fg=0;
for(int i=1;i<=n;++i){
if(a[i]%mi==0)vis[i]=1;
}
vector<int>v;v.clear();
for(int i=1;i<=n;++i){
if(vis[i])v.push_back(a[i]);
}
sort(v.begin(),v.end());
vector<int>rev;rev.clear();
while((int)v.size()){
rev.push_back(v.back());
v.pop_back();
}
for(int i=1;i<=n;++i){
if(vis[i])a[i]=rev.back(),rev.pop_back();
}
for(int i=2;i<=n;++i){
if(a[i]<a[i-1]){
fg=1;
break;
}
}
if(fg)puts("NO");
else puts("YES");
for(int i=1;i<=n;++i)a[i]=vis[i]=0;
}
return 0;
}
D
考虑贪心。因为给出了\(k\)的质因数分解结果,所以贪心显然思路是出现次数最大的边对应最大的质因子。
如果质因子数量小于\(n-1\)就补\(1,\)若大于则把最大的合并起来。
然后一遍\(dfs\)预处理\(siz\),注意次数\(siz*(n-siz)\)不能取模。这样会使得排序结果错误。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
inline int add(int x,int y){return (x+y)%mod;}
inline int mul(int x,int y){return 1ll*x*y%mod;}
const int MAXN=2e5+10;
int siz[MAXN],tot,head[MAXN],S;
struct edge{
int nxt,to;
}e[MAXN];
inline void link(int x,int y){
e[++tot].to=y;e[tot].nxt=head[x];
head[x]=tot;
}
int T,n,m,p[MAXN],ts[MAXN],t;
void dfs(int x,int fa){
siz[x]=1;
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].to;
if(j==fa)continue;
dfs(j,x);siz[x]+=siz[j];
ts[++t]=siz[j]*(n-siz[j]);
S++;
}
}
void debug(){
for(int i=1;i<n;++i)cout<<p[i]<<" ";
puts("");
for(int i=1;i<=t;++i)cout<<ts[i]<<" ";
cout<<endl;
for(int i=1;i<=n;++i)cout<<siz[i]<<" ";
puts("");
cout<<"*"<<S<<endl;
}
signed main(){
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);int ans=0;t=0,S=0;
for(int i=1;i<n;++i){
int x,y;
scanf("%lld%lld",&x,&y);
link(x,y);link(y,x);
}
dfs(1,0);
sort(ts+1,ts+t+1);reverse(ts+1,ts+t+1);
scanf("%lld",&m);
for(int i=1;i<=m;++i)scanf("%lld",&p[i]);
while(m<n-1)p[++m]=1;
sort(p+1,p+m+1);
if(m>n-1){for(int i=n;i<=m;++i)p[n-1]=mul(p[n-1],p[i]);}
reverse(p+1,p+n);
for(int i=1;i<n;++i)ans=add(ans,mul(ts[i],p[i]));
printf("%lld\n",ans);
tot=0;for(int i=1;i<=n;++i)head[i]=0,siz[i]=0;
for(int i=1;i<n;++i)ts[i]=0;
for(int i=1;i<=m;++i)p[i]=0;
}
return 0;
}
【比赛记录】8.21 div2的更多相关文章
- 【arc101】比赛记录
这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了.(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录. C - Candles 这题是一道一眼题,花 ...
- 【cf比赛记录】Codeforces Round #605 (Div. 3)
比赛传送门 Div3真的是暴力杯,比div2还暴力吧(这不是明摆的嘛),所以对我这种一根筋的挺麻烦的,比如A题就自己没转过头来浪费了很久,后来才醒悟过来了.然后这次竟然还上分了...... A题:爆搜 ...
- 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...
- 【cf比赛记录】Educational Codeforces Round 78 (Rated for Div. 2)
比赛传送门 A. Shuffle Hashing 题意:加密字符串.可以把字符串的字母打乱后再从前面以及后面接上字符串.问加密后的字符串是否符合加密规则. 题解:字符串的长度很短,直接暴力搜索所有情况 ...
- 【cf比赛记录】Codeforces Round #601 (Div. 2)
Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...
- 【cf比赛记录】Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...
- BestCoder Round #92 比赛记录
上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...
- [Codeforces 872]比赛记录
强行打了$cf$上的第一场比赛,现在感觉自己的$rating$会炸飞= = A 这是练习输入输出吗QAQ,竟然$WA$了两遍QAQ,我$WA$的一声就哭了出来啊QAQ B 好像很水的乱扫就好了,m ...
- 【cf比赛记录】Codeforces Round #604 (Div. 2)
比赛传送门 感觉这场是最近以来做过的最顺手的一场,持续上分,开心w A了 前三题,然后第四题其实还有半个多小时,但怕身体撑不住,就先退了,其实第四题也很简单 自己认为的算法标签: A.暴力模拟.字 ...
随机推荐
- 基于canal的client-adapter数据同步必读指南
本文将介绍canal项目中client-adapter的使用,以及落地生产中需要考虑的可靠性.高可用与监控报警.(基于canal 1.1.4版本) canal作为mysql的实时数据订阅组件,实现了对 ...
- 小程序开发-媒体组件image
image 图片组件,支持 JPG.PNG.SVG.WEBP.GIF 等格式,2.3.0 起支持云文件ID. 所有属性如下: Tips image组件默认宽度320px.高度240px image组件 ...
- Activiti工作流概述
本来打算看OCR的但是我手里有的资源是讲的PY的,涉及到CNN和RNN看得有的不太明白,捂脸,所以看看工作流吧,反正也都不会,干啥啥不会 工作流的概念 工作流的概念应该都差不多了解要不也不会搜索这个标 ...
- WebApi 接口传参接参
阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的 ...
- leetcode刷题-80.删除排序数组中的重复项 II
题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...
- 记一次奇怪的cookie丢失
.net给Image控件设置一个空图片路径的时候出现丢失cookie 比如说, img_path.ImageUrl ="../"+ ds.Tables[0].Rows[0][&q ...
- TP6.0中的密码验证逻辑、验证器的使用
目录 1. 场景一:只有一个密码框,并且是可选项,留空不修改密码,不留空则修改密码 2. 场景二:两个密码框,修改密码时有新密码.确认密码,新密码框不为空时,确认密码才验证 1. 场景一:只有一个密码 ...
- 如何入门Pytorch之四:搭建神经网络训练MNIST
上一节我们学习了Pytorch优化网络的基本方法,本节我们将以MNIST数据集为例,通过搭建一个完整的神经网络,来加深对Pytorch的理解. 一.数据集 MNIST是一个非常经典的数据集,下载链接: ...
- get、post请求方式区别
1.get请求只有请求头,没有请求体,它的参数只能写在url里面,post请求数据放在请求体里面 (HTTP协议:两台电脑交互url请求头Request Headers:一些额外的信息,比如用的什么浏 ...
- Robotframework自动化4-基础关键字介绍1
前言 上一节已经介绍了APP的启动,那我们就会看到我们引用了一些关键字,对于AppiumLibrary都有哪些常用的关键呢,这一节主要介绍这一部分. AppiumLibrary 常用关键字介绍 1.关 ...