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 < Pos&&V< Vy 那么两点的距离最小值就会为0,否则都为坐标的差值,那答案就是统计∑dis(i,j) (Pos< Posj && V≤ 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)(题解)的更多相关文章

  1. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  2. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  3. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  4. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  5. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  6. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  7. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  8. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  9. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

随机推荐

  1. Bulma CSS框架教程

    Bulma是一个轻量级的现代CSS框架,基于flex,跟bootstrap不一样纯CSS没有JS,与vuejs.reactjs这样JavaScript框架可以很好地集成. 为降低学习难度,让初学者可以 ...

  2. c# 类型转换 int.TryParse() 方法

    public static bool TryParse(string s, out Int32 result); 如果转换成功则返回true.否则返回false int.TryParse(string ...

  3. 哈希(hash)理解

    转载自https://www.cnblogs.com/mingaixin/p/4318837.html 一.什么是哈希?(一种更复杂的映射) Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就 ...

  4. vue学习(六)异步组件加载

    异步组件加载 首先准备-----简单的框架搭出来 <!DOCTYPE html> <html lang="zh-CN"> <head> < ...

  5. 每天一点点之vue框架开发 - History 模式下线上路由报404错误

    vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 his ...

  6. Mybatis报错——Mapped Statements collection already contains value for

    解决办法: 看看你的mybatis-config.xml <mappers>     <mapper resource="mapper/SeckillDao.xml&quo ...

  7. Maven - pom.xml 文件

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Maven – 构建生命周期.阶段 ...

  8. DP背包问题学习笔记及系列练习题

    01 背包: 01背包:在M件物品中取出若干件物品放到背包中,每件物品对应的体积v1,v2,v3,....对应的价值为w1,w2,w3,,,,,每件物品最多拿一件. 和很多DP题一样,对于每一个物品, ...

  9. 一个例子搞清楚Java程序执行顺序

    当我们new一个GirlFriend时,我们都做了什么? 一个例子搞懂Java程序运行顺序 public class Girl { Person person = new Person("G ...

  10. jQuery实现轮播图--入门

    jQuery是一个前台的框架. 主要函数: setInterval 语法:setInterval(code,millisec[,"lang"]) cdoe:需要执行的代码或者要调用 ...