Pinely Round 3 (Div. 1 + Div. 2)

发布时间 2023-12-28 11:37:09作者: yufan1102

A. Distinct Buttons

image
image

#include<bits/stdc++.h>
using namespace std;
void solve(){
	int n;
	cin>>n;
	int a=0,b=0,c=0,d=0;
	for(int i=1;i<=n;i++){
		int x,y;
		cin>>x>>y;
		if(x>0)a=1;
		if(y>0)b=1;
		if(x<0)c=1;
		if(y<0)d=1;
	}
	if(a&&b&&c&&d){
		cout<<"NO\n";
	}else{
		cout<<"YES\n";
	}
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t=1;
	cin>>t;
	for(int i=1;i<=t;i++)solve();
	return 0;
} 

B. Make Almost Equal With Mod

image
image

首先会想到2,因为除以2不是0就是1,但是碰到全是奇或全是偶就不好使了,那么就将2扩大一倍,image

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[200];
void solve(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int m=1;
	while(1){
		int k=(long long)1<<m;
		set<int>ans;
		for(int i=1;i<=n;i++){
			ans.insert(a[i]%k);
		}
		if(ans.size()==2){
			cout<<k<<"\n";
			return;
		}
		m++;
	}
}
signed main(){
    ios::sync_with_stdio(0);cout.tie(0);cin.tie(0);
	int t;
	cin>>t;
	for(int i=1;i<=t;i++)solve();
	return 0;
} 

C. Heavy Intervals

image
image

首先如果区间都是不相交的,是换不了的,所以只能去改变相交的,假使两个区间相加,想要权值最小化,是不是就应该让更多的区间去乘小的值,更少的区间去乘大的值,所以可以转换区间。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int l[N],r[N],c[N],p[N];
void solve(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>l[i];
	for(int i=1;i<=n;i++)cin>>r[i];
	for(int i=1;i<=n;i++)cin>>c[i];
	set<int>s(l+1,l+1+n);
	sort(r+1,r+1+n);
	for(int i=1;i<=n;i++){
		auto it=s.lower_bound(r[i]);
		l[i]=*prev(it);
		p[i]=r[i]-l[i];
		s.erase(prev(it));
	}
	sort(p+1,p+1+n,greater<int>());
    sort(c+1,c+1+n);
    int ans=0;
    for(int i=1;i<=n;i++){
    	ans+=(p[i]*c[i]);
	}
	cout<<ans<<"\n";
}
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t=1;
	cin>>t;
	for(int i=1;i<=t;i++)solve();
	return 0;
}