Codeforces Round #624 (Div. 3)(题解)
A. Add Odd or Subtract Even
思路:
相同直接为0,如果两数相差为偶数就为2,奇数就为1
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int kk;
scanf("%d",&kk);
while(kk--){
int n,m;
cin>>n>>m;
if(n==m) {printf("0\n");continue;}
if(m-n>){
if((m-n)%){cout<<<<endl;continue;}
else {cout<<<<endl;continue;}
}
if(!((n-m)%)) {
cout<<<<endl; continue;}
else cout<<<<endl;
}
}
B. WeirdSort
思路:
记录哪些位置可以交换,然后不断循环遍历数组直到没有交换发生,最后再判断一下是否符合要求即可,最坏时间复杂度为冒泡排序O(N2)
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=;
int a[maxn],b[maxn],flag[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--){
memset(flag,,sizeof(flag));
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=m;i++) scanf("%d",&b[i]),flag[b[i]]=;
int num=;
while(num){
num=;
for(int i=;i<=n;i++){
if(flag[i]){
if(a[i]>a[i+]){
num=;
swap(a[i],a[i+]);
}
}
}
}
int kk=;
for(int i=;i<n;i++)
if(a[i]>a[i+]) kk=;
if(kk) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return ;
}
C. Perform the Combo
思路:
根据会按错的位置,我们开个数组mp[i] 记录下犯错位置i的次数,然后一个数组c 来维护前缀和按错的字母的总和 然后每次碰到mp[i] 有值的话,我们去循环26个字母,把答案数组a加上当前维护的前缀的c*mp[i] 也就是当前位置犯错的次数就好了
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
ll mp[];
int b[];
char s[];
int main()
{
int t;
cin>>t;
while(t--)
{
ll a[]={};
ll c[]={};
int n,m;cin>>n>>m;
cin>>s+;
for(int i=;i<=n;i++) mp[i]=;
for(int i=;i<=m;i++){
cin>>b[i];
mp[b[i]]++;
}
for(int i=;i<=n;i++){
a[s[i]]++;
c[s[i]]++;
if(mp[i]){
for(int j='a';j<='z';j++){
a[j]=a[j]+(mp[i]*c[j]);
}
}
}
for(int i='a';i<='z';i++) cout<<a[i]<<" ";
puts(""); }
return ;
}
D. Three Integers
思路:
枚举i,然后枚举i的倍数j,再枚举j的倍数k,找到最小值即可,注意枚举范围一定要大
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int t,a,b,c;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&a,&b,&c);
int ans=inf,x=,y=,z=;
for(int i=;i<=;i++){
for(int j=i;j<=;j+=i){
for(int k=j;k<=;k+=j){
int kk=abs(a-i)+abs(b-j)+abs(c-k);
if(kk<ans){
ans=kk,x=i,y=j,z=k;
}
}
}
}
cout<<ans<<endl;
cout<<x<<" "<<y<<" "<<z<<" "<<endl;
}
return ;
}
F. Moving Points(树状数组+离散化)
思路:
如果Posx < Posy &&Vx < Vy 那么两点的距离最小值就会为0,否则都为坐标的差值,那答案就是统计∑dis(i,j) (Posi < Posj && Vi ≤ Vj)
看到位置跟速度的范围很大,首先将二者离散化,然后先按照坐标排序
一个点对答案的贡献就为所有坐标比他小并且速度比他小的点距离差值的和,所以就成了一个偏序问题
开两个树状数组sum[0][x]记录速度小于x的点的个数,sum[1][x]记录速度小于x的点的坐标和 动态加点就好了
#include<iostream>
#include<algorithm>
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;
const int maxn=2e5+;
struct node{
int x,v;
}a[maxn];
int speed[maxn],n;
ll sum[][maxn];
int cmp(node a,node b){return a.x<b.x;}
void add(int x,int val)
{
while(x<=n){
sum[][x]++,sum[][x]+=val;
x+=lowbit(x);
}
}
ll query(int x,int k)
{
ll ans=;
while(x>=){
ans+=sum[k][x];
x-=lowbit(x);
}
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i].x);
for(int i=;i<=n;i++) scanf("%d",&a[i].v),speed[i]=a[i].v;
sort(a+,a++n,cmp);
sort(speed+,speed++n);
unique(speed+,speed++n);
ll ans=;
for(int i=;i<=n;i++){
int now=lower_bound(speed+,speed++n,a[i].v)-speed;
ans+=a[i].x*query(now,)-query(now,);
add(now,a[i].x);
}
cout<<ans<<endl;
return ;
}
Codeforces Round #624 (Div. 3)(题解)的更多相关文章
- Codeforces Round #624 (Div. 3)(题解)
Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
随机推荐
- 关于springmvc的消息转换器
之前有用到消息转换器,一直是配置configureMessageConverters()这个方法的,虽然知道也有extendMessageConverters().它们的区别的是第一个不会继承框架默认 ...
- 记-OSPF学习
LSA Type 1:Router LSA1.传播范围 :只能在本区域2.通告者 :每台路由器 (router-id作为标识)3.内容 :路由和拓扑信息show ip ospf database ro ...
- 面向对象第二个特征-继承(Inheritance)
面向对象第二个特征-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java中的继承概述 1>.继承概述 多个类种存在相同属性和行为时,讲这 ...
- ZOJ - 3961 Let's Chat(区间相交)
题意:给定一个长度为n的序列,A和B两人分别给定一些按递增顺序排列的区间,区间个数分别为x和y,问被A和B同时给定的区间中长度为m的子区间个数. 分析: 1.1 ≤ n ≤ 109,而1 ≤x, y ...
- Ubuntu 安装VirtualBox 虚拟机
转载 1.终端命令 编辑sources.list ? 1 sudo gedit /etc/apt/sources.list 2.添加 软件源 将下面的地址加入sources.list 的末尾,保存并退 ...
- 考研c语言基础 66++6
1.数据类型 对于基本的数据类型,如整型int,long,...(考研中涉及处理的整数题目,如果没有特别要求用int足够了),字符型char,浮点型float.double...(对于处理小数问题,在 ...
- SpringMVC错误,商品添加信息HTTP Status 400 – Bad Request
记录一个自己在做商品信息显示与传递数据的时候出现的错误, HTTP Status 400 – Bad Request Type Status Report Description The server ...
- MyBatis:使用注解开发
面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大 ...
- sqlcook sql经典实例 emp dept 创建语句
创建表语句 create table dept( deptno int primary key, dname varchar(30), loc varchar(30) ); create table ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...