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

   日期:2020-08-23     浏览:98    评论:0    
核心提示:A. Distance and Axis题目传送门Distance and Axis题目大意给你一个点a的坐标n,求点b的坐标,使得∣OB−∣AB∣∣=K|OB-|AB||=K∣OB−∣AB∣∣=K思路先判断n和k的大小关系b在OA中每移动一个点改变的大小为2,所以判断n−kn-kn−k的奇偶性即可AC Code#include#include#includeusing namespace_codeforces round #665 (div. 2

A. Distance and Axis

题目传送门

Distance and Axis

题目大意

给你一个点a的坐标n,求点b的坐标,使得 ∣ O B − ∣ A B ∣ ∣ = K |OB-|AB||=K OBAB=K

思路

先判断n和k的大小关系
b在OA中每移动一个点改变的大小为2,所以判断 n − k n-k nk的奇偶性即可

AC Code

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
#define int long long
// #define TDS_ACM_LOCAL
const int N=2e5 +9;
int n, k;
void solve(){
    cin>>n>>k;
    if(n<=k)    cout<<k-n<<endl;
    else        cout<<((n-k)%2==0 ? 0:1)<<endl;
    return ;
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
#ifdef TDS_ACM_LOCAL
    freopen("D:\\VS code\\.vscode\\testall\\in.txt", "r", stdin);
    freopen("D:\\VS code\\.vscode\\testall\\out.txt", "w", stdout);
#endif
    int T;
    cin>>T;
    while(T--)  solve();
    return 0;
}

B. Ternary Sequence(贪心)

题目传送门

Ternary Sequence

题目大意

有两个由0,1,2组成的数组,分别给你两个数组中0,1,2的个数,其中满足

求c的和

思路

贪心,
1、让a的2优先匹配b的1,这样贡献为2,然后再匹配b的2,贡献为0(但是可以降低b中2的数量,使得后面-2尽可能少)
2、对于b中的2,在a中优先让0去匹配,使得贡献为0,最后才让a的1去匹配,贡献-2

AC Code

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
#define int long long
// #define TDS_ACM_LOCAL
int x, y, z;
int x2, y2, z2;

void solve(){
    cin>>x>>y>>z;
    cin>>x2>>y2>>z2;
    int ans=0;

    int tep=min(z,y2);  //a中2,匹配b中1,贡献为2
    ans+=tep*2;
    z-=tep, y2-=tep;
    if(z>0){           //a中2,匹配b中2,贡献为0
        tep=min(z, z2);
        z-=tep, z2-=tep;
    }
    if(z>0){            //b中的1和2都被匹配完了,剩余的0也就无所谓了,直接输出
        cout<<ans<<endl;
        return ;
    }

    if(z2>0){           //b中2,匹配a中0,贡献0
        tep=min(x, z2);
        x-=tep, z2-=tep;
    }
    if(z2>0){           //b中2,匹配a中1,贡献-2
        tep=min(y, z2);
        ans-=tep*2;
        y-=tep, z2-=tep;
    }
    cout<<ans<<endl;
    return ;
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
#ifdef TDS_ACM_LOCAL
    freopen("D:\\VS code\\.vscode\\testall\\in.txt", "r", stdin);
    freopen("D:\\VS code\\.vscode\\testall\\out.txt", "w", stdout);
#endif
    int T;
    cin>>T;
    while(T--)  solve();
    return 0;
}

C. Mere Array

题目传送门

Mere Array

题目大意

给你一个长度为n的数组a,其中 g c d ( a i , a j ) = m i n gcd(a_i,a_j)=min gcd(ai,aj)=min的两两元素可以做交换,求最后能否将数组a改变成非递减的数组

思路

可以复制一个a数组先排序,然后对于排序后的数组,与a不同的位置判断能否通过交换改变
交换操作:既然gcd等于最小值,即为该数的因子包含最小值,所以包含最小值的元素可以通过最小值进行交换,也就是 a i % m i n = = 0 a_i\%min==0 ai%min==0即可

AC Code

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
#define int long long
// #define TDS_ACM_LOCAL
const int N=1e5 +9;
int n, a[N], b[N], mi;

void solve(){
    cin>>n;
    mi=INF;
    for(int i=1; i<=n; i++){
        cin>>a[i];
        b[i]=a[i];
        if(a[i]<mi) mi=a[i];
    }
    sort(b+1, b+1+n);
    int flag=0;
    for(int i=1; i<=n; i++)
        if(a[i]!=b[i] && a[i]%mi!=0)    {flag=1; break;}
    if(flag)    cout<<"NO"<<endl;
    else        cout<<"YES"<<endl;
    return ;
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
#ifdef TDS_ACM_LOCAL
    freopen("D:\\VS code\\.vscode\\testall\\in.txt", "r", stdin);
    freopen("D:\\VS code\\.vscode\\testall\\out.txt", "w", stdout);
#endif
    int T;
    cin>>T;
    while(T--)  solve();
    return 0;
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服