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. MongoDB Projection

    版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...

  2. sql server 日期时间数据类型

    1.日期和时间数据类型 (1)在sqlserver 2008之前,SQL Server 支持datetime 和 smalldatetime 两种日期时间数据类型.这两种数据类型日期和时间是不可分割的 ...

  3. python 中的os.path.split()函数用法

    基本概念   os.path.split()通过一对链表的头和尾来划分路径名.链表的tail是是最后的路径名元素.head则是它前面的元素. 举个例子: path name = '/home/User ...

  4. mybatis的一对多和多对一的连接查询

    实体类: package com.entity; import java.util.List; public class Dept { private Integer deptId; private ...

  5. Javascript声明和使用变量

    1.1变量的声明 要在程序中使用变量,就必须从声明变量学起,因为Javascript语法与我们基础的其他程序语言声明变量的方法略有不同,但是Javascript语法的变量应用非常强大,使用也非常简单. ...

  6. java正则 读取html 获取标题/超链接/链接文本/内容

    java正则 读取html 获取标题/超链接/链接文本/内容 参考链接:http://yijianfengvip.blog.163.com/blog/static/175273432201142785 ...

  7. delphi 单例模式

    unit Singleton; (* 单例模式适用于辅助类, 一般伴随于单元的生命周期 *) interface uses SysUtils; type TSingleton = class publ ...

  8. GBDT入门

    GBDT(MART)迭代决策树入门教程 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree) ...

  9. UVALive 3983 捡垃圾的机器人 DP

    这个题目我最初的做法沿用树形DP的做法,设置一个 dp[i][0]表示机器人在i点不回去的最短路径,dp[i][1]表示机器人在i点回去的最短路径,规划方向为i-1向i转移,结果发现这个不能用树形的结 ...

  10. 把Android studio的日志导入目标文件中

    最好是在Android studio的命令行工具中进行命令操作. adb logcat -v time > /Users/z/log.txt adb logcat -v time > /U ...