C o d e f o r c e s R o u n d 920 ( D i v . 3 ) \Huge{Codeforces Round 920 (Div. 3)} CodeforcesRound920(Div.3)
题目地址:https://codeforces.com/contest/1921
题目给出了正方形各点的坐标,因此我们只需知道一条边的长度,就能求出正方形的面积。无论横纵坐标,都会有两个相等,两个不等,找出不相等的计算出距离,即为结果。
void Solved() {
vector<int> a(4), b(4);
for(int i = 0; i < 4; i ++ ) {
cin >> a[i] >> b[i];
}
int res = 0;
if(a[0] != a[1]) res = abs(a[0] - a[1]);
else res = abs(a[0] - a[2]);
cout << res * res << endl;
}
给定两个01字符串,并给出三种操作。求把第二种变为第一种需要的最少操作次数。
遍历一遍两个字符串,统计出不同的个数,一次操作1和一次操作2可以用操作3代替,所以结果即为 x 1 + x 2 ? M i n ( x 1 , x 2 ) x1+x2-Min(x1, x2) x1+x2?Min(x1,x2)。
void Solved() {
int n; cin >> n;
string s1, s2; cin >> s1 >> s2;
int x1 = 0, x2 = 0;
for(int i = 0; i < n; i ++ ) {
if(s1[i] != s2[i]) {
if(s1[i] == '1') x1 ++;
else x2 ++;
}
}
cout << x1 + x2 - min(x1, x2) << endl;
}
题目给出需要发送信息的时刻,在该时刻手机需要开机才能发消息,然后题目给出 n , f , a , b n,f,a,b n,f,a,b,分别代表消息数量、手机电量、每单位手机开机的耗电量、手机关机再开机的耗电量,要求判断手机的电量是否支持发送完全部消息。
按照常规思路,当手机长时间不使用时应该关闭,这样会更加省电,因此我们判断在发送两个消息间隔期间是否需要关闭手机。遍历一遍发送信息的时刻即可。
#define int long long
void Solved() {
int n, f, a, b; cin >> n >> f >> a >> b;
vector<int> x(n + 1);
for(int i = 1; i <= n; i ++ ) cin >> x[i];
int res = 0;
for(int i = 1; i <= n; i ++ ) {
res += min((x[i] - x[i - 1]) * a, b);
}
if(res >= f) cout << "NO" << endl;
else cout << "YES" << endl;
}
有一个长度为 n n n的数组 a a a,和一个长度为 m m m的数组 b , ( m ≥ n ) b,(m \ge n) b,(m≥n),要求从数组 b b b中选出 n n n个数字,使得 D = ∑ i = 1 n ∣ a i ? c i ∣ D = \sum_{i=1}^{n} |a_i - c_i| D=∑i=1n?∣ai??ci?∣尽可能大,并输出最大差异 D D D。
#define int long long
void Solved() {
int n, m; cin >> n >> m;
vector<int> a(n), b(m);
deque<int> s, d;
for(auto &i : a) cin >> i;
for(auto &i : b) cin >> i;
sort(ALL(a)); sort(ALL(b));
for(int i = 0; i < n; i ++ ) s.push_back(a[i]);
for(int i = 0; i < m; i ++ ) d.push_back(b[i]);
int res = 0;
for(int i = 0; i < n; i ++ ) {
int res1 = abs(s.front() - d.back());
int res2 = abs(s.back() - d.front());
if(res1 >= res2) {
s.pop_front();
d.pop_back();
} else {
d.pop_front();
s.pop_back();
}
res += max(res1, res2);
}
cout << res << endl;
}
给定一个 h × w h \times w h×w的方阵,然后给出Alice和Bob的坐标,Alice每次只能移动到下面三个格子中,Bob每次只能移动到上面三个格子中,如果谁先抓住另一个人,则其获胜。
void Solved() {
int h, w, x1, x2, y1, y2; cin >> h >> w >> x1 >> y1 >> x2 >> y2;
if(abs(y1 - y2) > x2 - x1) {
cout << "Draw" << endl;
} else if((x2 - x1) & 1) {
int step = (x2 - x1 + 1) >> 1;
if(abs(y1 - y2) <= 1 || (y1 < y2 ? w - y1 : y1 - 1) <= step)
cout << "Alice" << endl;
else
cout << "Draw" << endl;
} else {
int step = (x2 - x1) >> 1;
if(y1 == y2 || (y1 < y2 ? y2 - 1 : w - y2) <= step)
cout << "Bob" << endl;
else
cout << "Draw" << endl;
}
}