Codeforces Round #665 (Div. 2) A ~ C

A. Distance and Axis

题意 :

在x正方向上给定一个点A的坐标和一个距离k, 问能否找到一个B点使得 |dAB - dOB| = k. (B 的坐标为整数)

思路 :

设A(y, 0), B(x, 0).

分情况 :

​ (1) 若 y < k, 直接让A运动到k, 此时B点取为0点.

​ (2) 若 y >= k, 需要满足 y - 2x = k, 但是注意x必须取到整数.

AC代码 :

#include <bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
inline int lowbit(int x) { return x & (-x); }
#define ll long long
#define pb push_back
#define PII pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f
int a, b;
 
void run() {
    int ans;
    if (a >= b) {
        int t = a - b;
        if (t & 1) ans = 1;
        else ans = 0;
    } else ans = b - a;
    cout << ans << endl;
}
 
int main() {
	IO;
	int _;
	cin >> _;
	while (_--) {
		cin >> a >> b;
		run();
	}
	return 0;
}

B. Ternary Sequence

题意 :

给出A, B两个n = 3的数组描述两个序列, 每个数组中的元素都表示对应序列中0, 1, 2的个数, 两个序列内部可以随意排列, 定义一个新序列c, ci 定义如下 :

\[C_i =\left\{ \begin{array}{rcl} a_ib_i & & {a_i > b_i}\\ 0 & & {a_i = b_i}\\ -a_ib_i & & {a_i < b_i}\\ \end{array} \right. \]

\(\sum_{i=1}^n\)Ci 的最大值.

思路 :

贪心 : 让A中尽量多的2能与B中的1组合, 让A中尽量少的1与B中的2组合.

AC代码 :
#include <bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
inline int lowbit(int x) { return x & (-x); }
#define ll long long
#define pb push_back
#define PII pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f
int a[3];
int b[3];
 
int main() {
	IO;
	int _;
	cin >> _;
	while (_--) {
		for (int i = 0; i < 3; ++i) cin >> a[i];
		for (int i = 0; i < 3; ++i) cin >> b[i];
		ll ans = 0;
		int t = min(a[2], b[1]);
		a[2] -= t;
		b[1] -= t;
		ans += t * 2;
        
        t = max(b[2] - a[0] - a[2], 0);
        t = min(t, a[1] - b[0] - b[1]);
        t = max(0, t);
        ans -= t * 2;
 
		cout << ans << endl;
	}
	return 0;
}

C. Mere Array

题意 :

对于给定的序列, 如果gcd(ai, aj) = min{a1, a2, a3, ......an}, 那么ai, aj可交换, 问能否使序列变成不减序列.

思路 :

通过最小值m, 相当于所有m的倍数都可以任意交换, 于是可以将m的倍数都取出排好序再放回原序列, 看看是否满足条件即可.

AC代码 :
#include <bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
inline int lowbit(int x) { return x & (-x); }
#define ll long long
#define pb push_back
#define PII pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f
const int N = 1e5 + 7;
int a[N];
int st[N];

int main() {
	IO;
	int _;
	cin >> _;
	while (_--) {
		memset(st, 0, sizeof st);
		int n, flag = 1, m = inf;
		cin >> n;	
		for (int i = 1; i <= n; ++i) {
			cin >> a[i];
			if (a[i] < a[i - 1]) flag = 0;
			m = min(m, a[i]);
		}

		if (flag) {
			puts("YES");
			continue;
		}
		vector<int> v;
		for (int i = 1; i <= n; ++i) 
			if (a[i] % m == 0) {
				st[i] = true;
				v.pb(a[i]);
			}

		sort(v.begin(), v.end());
		int cnt = 0;
		for (int i = 1; i <= n; ++i) 
			if (st[i]) a[i] = v[cnt++];
			
		flag = 1;
		for (int i = 1; i <= n; ++i)
			if (a[i] < a[i - 1]) {
				flag = 0;
				break;
			}
			
	   
		if (flag) puts("YES");
		else puts("NO");
	}
	return 0;
}
posted @ 2020-10-24 22:35  phr2000  阅读(59)  评论(0编辑  收藏  举报