Codeforces Round 920 (Div. 3)

 Problem - A - Codeforces

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int x[4],y[4];
void solve() {
	for(int i=0;i<4;i++) cin>>x[i]>>y[i];
	int idx;
	for(int i=1;i<4;i++){
		if(y[i]==y[0]){
			idx=i;
			break;
		} 
	}
	vector<int>ans;
	for(int i=1;i<4;i++){
		if(i==idx) continue;
		ans.push_back(i);
	}
	cout<<abs(x[ans[0]]-x[ans[1]])*abs(y[ans[0]]-y[0])<<endl;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t=1;
    cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}

Problem - B - Codeforces 

n个箱子,如果箱子里有猫,则bi=1,否则bi=0
操作:一天可以做三个操作之一:放进去一只猫,拿走一只猫,移动一只猫
问最少几天可以让全部猫在期望位置(解总是存在)

统计有几个位置是需要把猫拿掉的,有几个位置需要放进去猫,取max

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n;
string s,t;
void solve() {
	cin>>n;
	cin>>s>>t;
	int cnt1=0,cnt2=0;
	for(int i=0;i<n;i++){
		if(s[i]=='1'&&t[i]=='0') cnt1++;
		else if(s[i]=='0'&&t[i]=='1') cnt2++;
	}
	cout<<max(cnt1,cnt2)<<endl;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t=1;
    cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}

Problem - C - Codeforces 

需要发送n条信息,分别在时刻mi
初始电量为f(0时刻)
每开机一个单位损失a,关机再打开损失b
问是否可以发送所有信息
遍历每个时刻,看一直开机划算还是先关机再开机划算,两个进行选取

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=2e5+10;
int m[N];
int n,f,a,b;
void solve() {
	cin>>n>>f>>a>>b;
	for(int i=1;i<=n;i++) cin>>m[i];
	for(int i=1;i<=n;i++){
		int use=min(a*(m[i]-m[i-1]),b);
		f-=use;
		if(f<=0){
			cout<<"No"<<endl;
			return;
		}
	}
	cout<<"Yes"<<endl;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t=1;
    cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}

Problem - D - Codeforces 

长度为n的数组a给定
从长度为m的数组b中选取n个整数成为数组c,使得ai-ci的绝对值之和D尽可能大
求最大的D

与顺序无关,先排个序
手玩
均从小到大排序,然后利用双指针,将大的放在左边,小的放在右边,贪错了
贪心
每次都是取当前差值最大的两个进行匹配
利用双指针

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=2e5+10;
int a[N],b[N],c[N];
int n,m;
void solve() {
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) cin>>b[i];
	sort(a+1,a+1+n);
	sort(b+1,b+1+m);
	reverse(b+1,b+1+m);
	int ans=0;
	//双指针
	int p=1,q=m;//p指向最大的,q指向最小的
	for(int i=1,j=n;i<=j;){//i指向最小的,j指向最大的
		if(abs(a[i]-b[p])>=abs(a[j]-b[q])){
			ans+=abs(a[i]-b[p]);
			i++,p++;
		}
		else{
			ans+=abs(a[j]-b[q]);
			j--,q--;
		}
	}
	cout<<ans<<endl;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t=1;
    cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}

Problem - E - Codeforces 

参考Codeforces Round 920 (Div. 3) A - G - 知乎

首先只有两个人走到同一行才可能分出胜负,所以两个人只有一个人可能赢.

赢的方法是在同一行相遇之前让两个芯片的纵坐标相同.

所以不可能赢的那一方一定是尽量往边上跑,只需要判断相遇之前能否追上即可.

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int h,w,xa,ya,xb,yb;
void solve() {
	cin>>h>>w>>xa>>ya>>xb>>yb;
	if(xa>=xb){//如果初始在同一行或者Alice在Bob的下面,那么平局
		cout<<"Draw"<<endl;
		return;
	}
	if((xb-xa)%2==1){//如果xb-xa是奇数,要么Alice赢,要么平局
		if(abs(ya-yb)<=1){//如果在同一列或者相差一列,Alice先手,始终可以做到和Bob在同一列,Alice必赢
			cout<<"Alice"<<endl;
			return;
		}
		if(ya>yb){//Alice在Bob的右边,且相差大于1列,Alice追,Bob跑,均往左
			if(ya-1<=(xb-xa+1)/2){//Alice走(xb-xa+1)/2步可以和Bob到同一行,只要看Alice走到左边界的步数ya-1是否小于等于走到和Bob同一行的步数
				cout<<"Alice"<<endl;
				return;
			}
			else{
				cout<<"Draw"<<endl;
				return;
			}
		}
		else{
			if(w-ya<=(xb-xa+1)/2){
				cout<<"Alice"<<endl;
				return;
			}
			else{
				cout<<"Draw"<<endl;
				return;
			}
		}
	}
	else{//如果ya-xa是偶数,要么Bob赢,要么平局
		if(ya==yb){//如果在同一列,Bob可以始终保持和Alice同列
			cout<<"Bob"<<endl;
			return;
		}
		//Alice先手,先走一步
		if(ya>yb){//Alice在右边
			xa++;
			ya=min(w,ya+1);
		}
		else{//Alice在左边
			xa++;
			ya=max(1ll,ya-1);
		}
		//此时Bob追赶Alice
		if(yb>ya){
			if(yb-1<=(xb-xa+1)/2){
				cout<<"Bob"<<endl;
				return;
			}
			else{
				cout<<"Draw"<<endl;
				return;
			}
		}
		else{
			if(w-yb<=(xb-xa+1)/2){
				cout<<"Bob"<<endl;
				return;
			}
			else{
				cout<<"Draw"<<endl;
				return;
			}
		}
	}
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t=1;
    cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}

相关推荐

  1. Codeforces Round 920 (Div. 3)

    2024-01-18 03:52:03       56 阅读
  2. Codeforces Round 925 (Div. 3)

    2024-01-18 03:52:03       61 阅读
  3. Codeforces Round 950 (Div. 3)

    2024-01-18 03:52:03       27 阅读
  4. Codeforces Round 900 (Div. 3)补题

    2024-01-18 03:52:03       70 阅读
  5. cf923Div3F题

    2024-01-18 03:52:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 03:52:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 03:52:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 03:52:03       82 阅读
  4. Python语言-面向对象

    2024-01-18 03:52:03       91 阅读

热门阅读

  1. VCG 网格清洗之移除小组件

    2024-01-18 03:52:03       54 阅读
  2. 3、python布尔类型和条件表达式

    2024-01-18 03:52:03       50 阅读
  3. Ubuntu 从零开始配置环境

    2024-01-18 03:52:03       51 阅读
  4. [网络安全]DHCP 部署与安全

    2024-01-18 03:52:03       46 阅读
  5. CSS 高频面试题

    2024-01-18 03:52:03       50 阅读
  6. MetaGPT-打卡day01

    2024-01-18 03:52:03       47 阅读
  7. redis内存淘汰机制

    2024-01-18 03:52:03       52 阅读
  8. LeetCode 36. 有效的数独

    2024-01-18 03:52:03       52 阅读