Codeforces补题2020.2.28(Round624 Div 3)
A.Add Odd or Subtract Even
签到题~
#include<bits/stdc++.h>
using namespace std;
int T;
int a,b;
int main () {
scanf("%d",&T);
while (T--) {
scanf("%d%d",&a,&b);
if (a==b) {
printf ("0\n");continue;
}
if (a>b&&(a-b)%==) {
printf ("1\n");continue;
}
if (a>b&&(a-b)%==) {
printf ("2\n");continue;
}
if (a<b&&(b-a)%==) {
printf ("2\n");continue;
}
if (a<b&&(b-a)%==) {
printf ("1\n");continue;
}
}
return ;
}
B.Weired Sort
题意:
给你一个长度为n的数组a。
你还得到一组不同的位置p1,p2,…,pm,其中1≤pi<n。位置pi意味着你可以交换元素a[pi]和a[pi+1]。您可以对每个给定位置应用此操作任意次数。
您的任务是确定是否可以仅使用允许的交换按非递减顺序(a1≤a2≤⋯≤an)对初始数组进行排序。
例如,如果a=[3,2,1]和p=[1,2],那么我们可以首先交换元素a[2]和a[3](因为位置2包含在给定的集合p中)。我们得到数组a=[3,1,2]。然后我们交换a[1]和a[2](位置1也包含在p中)。我们得到数组a=[1,3,2]。最后,我们再次交换a[2]和a[3],得到数组a=[1,2,3],按非递减顺序排序。
可以看到,如果a=[4,1,2,3]和p=[3,2],则无法对数组进行排序。
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int a[maxn];
int b[maxn];
int T;
int N,M,K;
int main () {
scanf("%d",&T);
while (T--) {
scanf("%d%d",&M,&N);
for (int i=;i<=M;i++) scanf("%d",&a[i]);
for (int i=;i<=N;i++) scanf("%d",&b[i]);
for (int i=;i<=M;i++) {
for (int j=;j<=N;j++) {
if (a[b[j]]>a[b[j]+]) {
swap(a[b[j]+],a[b[j]]);
}
}
}
if (is_sorted(a+,a+M+)) printf ("YES\n");
else printf ("NO\n");
}
return ;
}
C.Perform the Combo
题意:
你想在一个流行的格斗游戏中对你的对手进行连击。组合是由n个小写拉丁字母组成的字符串s。要执行组合,您必须按所有按钮在s中的显示顺序按它们。即,如果s=“abca”,则必须再次按“a”,然后按“b”、“c”和“a”。
你知道你将花费m个错误的尝试来执行组合,在第i次尝试中,你将在第i个按钮之后(1≤pi<n)犯一个错误(即,你将按第一个pi按钮,从一开始就开始执行组合)。可以保证在m+1次尝试中,您正确地按下所有按钮,最后执行组合。
一、 e.如果s=“abca”、m=2和p=[1,3],则按下的按钮顺序将是“a”(这里您犯了错误,从一开始就开始执行组合)、“a”、“b”、“c”(这里您犯了错误,从一开始就开始执行组合)、“a”(注意,此时您不会因为错误而执行组合),“b”、“c”、“a”。
你的任务是为每个按钮(字母)计算你按下它的次数。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int p[maxn];
char s[maxn];
int pos[maxn][];
int cnt[];
int T;
int N,M;
int main () {
scanf("%d",&T);
while (T--) {
memset(cnt,,sizeof(cnt));
scanf("%d%d",&N,&M);
scanf("%s",s);
for (int i=;i<=M;i++)
scanf("%d",&p[i]);
p[++M]=N;
for (int i=;i<=;i++)
pos[][i]=;
pos[][s[]-'a'+]++;
for (int i=;i<N;i++) {
for (int j=;j<=;j++)
pos[i][j]=pos[i-][j];
pos[i][s[i]-'a'+]++;
}
for (int i=;i<=M;i++) {
for (int j=;j<=;j++) {
cnt[j]+=pos[p[i]-][j];
}
}
for (int i=;i<=;i++)
printf ("%d ",cnt[i]);
printf ("\n");
}
return ;
}
D.Three Integers
题意:
给你三个整数a≤b≤c。
在一次移动中,您可以将+1或-1添加到这些整数中的任何一个(即,将任意数字增加或减少一个)。您可以执行这样的操作任意(可能为零)次,甚至可以使用一个数字执行此操作多次。注意,使用这种操作不能生成非正数。
为了得到三个整数A≤B≤C,使B可被A整除,C可被B整除,必须执行这样的操作的最小数目。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
const int inf=1e9;
int N;
int main () {
int T;
int a,b,c;
scanf("%d",&T);
while (T--) {
scanf("%d%d%d",&a,&b,&c);
int mmin=inf;
int A,B,C;
for (int i=;i<=;i++)
for (int j=i;j<=;j+=i)
for (int k=j;k<=;k+=j) {
int tmp=abs(a-i)+abs(b-j)+abs(c-k);
if (tmp<mmin) {
mmin=tmp;
A=i;
B=j;
C=k;
}
}
printf ("%d\n",mmin);
printf ("%d %d %d\n",A,B,C);
}
return ;
}
E.Construct the Binary Tree
题意:
给定两个整数n和d,需要构造一个由n个顶点组成的有根二叉树,顶点1有根,所有顶点的深度之和等于d。
树是没有圈的连通图。有根树有一个特殊的顶点叫做根。顶点v的父顶点是从根到顶点v的路径上最后一个不同于v顶点的顶点。顶点v的深度是从根到顶点v的路径的长度。顶点v的子顶点是所有v为父顶点的顶点。二叉树是这样一棵树,没有一个顶点有超过2个子节点。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int T;
int N;
int d;
int father[maxn];
int dep[maxn];
int a[maxn];
int ans;
int visit[maxn];
int main () {
scanf("%d",&T);
while (T--) {
scanf("%d%d",&N,&d);
int mmax=;
a[]=;
for (int i=;i<=N;i++) {
father[i]=i/;
dep[i]=dep[father[i]]+;
d-=dep[i];
mmax=max(mmax,dep[i]);
}
if (d<) {
printf ("NO\n");
continue;
}
for (int i=;i<=N;i++) visit[i]=;
int tn=N;
while (tn) {
a[dep[tn]]=tn;
visit[tn]=;
tn=father[tn];
}
for (int i=N;i>=;i--) {
if (visit[i]) continue;
int pre=mmax;
while (dep[father[i]]<pre&&d) {
father[i]=a[dep[father[i]]+];
dep[i]=dep[father[i]]+;
if (dep[i]>mmax) {
mmax++;
a[mmax]=i;
visit[i]=;
}
d--;
}
}
if (d) {
printf ("NO\n");
continue;
}
printf ("YES\n");
for (int i=;i<=N;i++) printf ("%d ",father[i]);
printf ("\n");
}
return ;
}
F.Moving Points
题意:
坐标轴上有N个点,第i个点位于整数点席,具有速度VI。保证两个点不占用同一个坐标。所有n个点以恒定速度移动,第i个点在时刻t(t可以是非整数)的坐标计算为xi+t⋅vi。
考虑两点i和j。设d(i,j)为这两点在任何可能的时间矩(甚至非整数)上的最小可能距离。这意味着,如果两个点i和j在某个时刻重合,则值d(i,j)将为0。
你的任务是计算∑1≤i<j≤n d(i,j)(所有点对上的最小距离之和)。
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
typedef long long ll;
int lowbit (int x) {
return x&-x;
}
int N;
ll c1[maxn];
ll c2[maxn];
int v1[maxn];
int v2[maxn];
int x1[maxn];
int x2[maxn];
int sa[maxn];
bool cmp1 (int a,int b) {
return x1[a]<x1[b];
}
bool cmp2 (int a,int b) {
return v2[a]<v2[b]||(v2[a]==v2[b]&&x2[a]<x2[b]);
}
void add (int p,ll v) {
for (;p<=N;p+=lowbit(p)) {
c1[p]++;
c2[p]+=v;
}
}
pair<ll,ll> getSum (int p) {
ll ans1=;
ll ans2=;
for (;p;p-=lowbit(p)) {
ans1+=c1[p];
ans2+=c2[p];
}
return make_pair(ans1,ans2);
}
int main () {
scanf("%d",&N);
for (int i=;i<=N;i++) {
scanf("%d",&x1[i]);
sa[i]=i;
}
for (int i=;i<=N;i++) scanf("%d",&v1[i]);
sort (sa+,sa+N+,cmp1);
for (int i=;i<=N;i++) {
v2[i]=v1[sa[i]];
x2[i]=x1[sa[i]];
sa[i]=i;
}
sort (sa+,sa+N+,cmp2);
ll ans=;
for (int i=;i<=N;i++) {
pair<ll,ll> res=getSum(sa[i]-);
ans+=res.first*x2[sa[i]]-res.second;
add(sa[i],x2[sa[i]]);
}
printf ("%lld\n",ans);
return ;
}
Codeforces补题2020.2.28(Round624 Div 3)的更多相关文章
- Codeforces 补题记录
首先总结一下前段时间遇到过的一些有意思的题. Round #474 (Div. 1 + Div. 2, combined) Problem G 其实关键就是n这个数在排列中的位置. 这样对于一个排 ...
- 【cf补题记录】Codeforces Round #608 (Div. 2)
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...
- 【cf补题记录】Codeforces Round #607 (Div. 2)
比赛传送门 这里推荐一位dalao的博客-- https://www.cnblogs.com/KisekiPurin2019/ A:字符串 B:贪心 A // https://codeforces.c ...
- 【补题记录】ZJU-ICPC Summer Training 2020 部分补题记录
补题地址:https://zjusummer.contest.codeforces.com/ Contents ZJU-ICPC Summer 2020 Contest 1 by Group A Pr ...
- Codeforces VP/补题小记 (持续填坑)
Codeforces VP/补题小记 1149 C. Tree Generator 给你一棵树的括号序列,每次交换两个括号,维护每次交换之后的直径. 考虑括号序列维护树的路径信息和,是将左括号看做 ...
- 2020.12.20vj补题
A - Insomnia cure 题意:一共s只龙,每隔k,l,m,n只龙就会受伤,问这s只龙有多少龙是受伤的 思路:看起来题目范围并不是很多,直接进行循环判断 代码: 1 #include< ...
- 【JOISC 2020 补题记录】
目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...
- 2017河工大校赛补题CGH and 赛后小结
网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...
- 4.30-5.1cf补题
//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...
随机推荐
- JAVA8List排序,(升序,倒序)
List<Integer> integerList = Arrays.asList(4, 5, 2, 3, 7, 9); List<Integer> collect = int ...
- .net mvc中epplus导出excel
帮助类 using OfficeOpenXml; using OfficeOpenXml.Style; using System; using System.Collections.Generic; ...
- kali linux中mariadb加上密码
kali自带mysql.2019.4 中带得是:MariaDB.据说跟Mysql差不多.简单用了一下发现root用户可以不要密码进入Mysql! 这极不习惯,不输入密码感觉好像少了点什么.这肯定是权限 ...
- gulp常用插件之gulp-postcss使用
更多gulp常用插件使用请访问:gulp常用插件汇总 ** gulp-postcss**这是一款通过多个插件通过管道传递CSS,但是仅解析一次CSS. 更多使用文档请点击访问gulp-postcss工 ...
- PAT (Advanced Level) Practice 1008 Elevator (20 分) (模拟)
The highest building in our city has only one elevator. A request list is made up with N positive nu ...
- 在什么情况下,不写notify()或者notifyAll()就能唤醒被wait()阻塞的线程?
之前再看java关于线程的某视频时,发现在JDK源码中,join()=join(0)=wait()=wait(0),但是视频中在join()了之后,并没有用notify()或者notifyAll()去 ...
- DFS-C - N皇后问题
C - N皇后问题 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于给定的N,求出有多少种合法的放 ...
- Django生成脚本迁移文件时,报错django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
一.本人环境:django:3.0.2, python:3.8.1, pymysql:0.9.3 二.解决步骤: 1.django目录下找到 base.py文件: 2.在base.py文件中注释以下 ...
- phpstorm安装bootstrap插件
一个插件可以很好的让我们工作节约时间 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 We ...
- jQuery---淘宝精品案例
淘宝精品案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...