首页 > 其他分享 >Codeforces Round 920 (Div. 3)(A~F)

Codeforces Round 920 (Div. 3)(A~F)

时间:2024-02-06 22:23:04浏览次数:32  
标签:int rep Codeforces long cin pair 920 Div define

目录

A

image

按题意模拟即可

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;

void solve()
{
	set<pii>s;
	rep(i,1,4){
		int x,y;cin>>x>>y;
		s.insert({x,y});
	}
	for(auto [x1,y1]:s){
		for(auto [x2,y2]:s){
			if(x1==x2&&y1==y2)	continue;
			if(x1==x2){
				cout<<abs(y1-y2)*abs(y1-y2)<<endl;
				return;
			}
		}
	}
}
signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

B

image

统计01和10的数量取最大值

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;

void solve()
{
	string s1,s2;
	int n;cin>>n;
	cin>>s1>>s2;
	int cnt1=0,cnt2=0;
	rep(i,0,s1.size()-1){
		if(s1[i]=='0'&&s2[i]=='1')	{
			cnt1++;
		}else if(s1[i]=='1'&&s2[i]=='0'){
			cnt2++;
		}
	}
	cout<<min(cnt1,cnt2)+abs(cnt1-cnt2)<<endl;
}
signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

C

image

考虑贪心,到达当前如果a操作的代价大选择b操作,b操作的代价大选择a操作

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;

void solve()
{
	int n,f,a,b;cin>>n>>f>>a>>b;
	vector<int>t(n+1);
	int ans=0;
	rep(i,1,n){
		cin>>t[i];
		int costa=(t[i]-t[i-1])*a;
		int costb=b;
		ans+=min(costa,costb);
	}
	cout<<(ans>=f?"no":"yes")<<endl;
}
signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

D

image

双指针+贪心
先将两个数组排序,a升序,b降序。
然后比较两个端点的对答案的贡献,选择贡献大的


#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;

void solve()
{
	int n,m;cin>>n>>m;
	vector<int>a(n+1),b(m+1);
	rep(i,1,n){
		cin>>a[i];
	}
	rep(i,1,m){
		cin>>b[i];
	}
	sort(a.begin()+1,a.begin()+1+n);
	sort(b.begin()+1,b.begin()+1+m,greater<int>());
	int ans=0,la=1,ra=n,lb=1,rb=m;
	rep(i,1,n){
		int dl=abs(a[la]-b[lb]),dr=abs(a[ra]-b[rb]);
		if(dl>dr){
			ans+=dl;
			la++;lb++;
		}else{
			ans+=dr;
			ra--;rb--;
		}
	}
	cout<<ans<<endl;
}
signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

E

image

博弈论的题目
将行列分开考虑
先考虑行,最终两者一定会走到一行。
什么情况下alice可能会赢,一定是\(yb-ya\)为奇数时
当\(yb-ya\)为偶数时,bob可能赢
然后考虑列一定是一方经过turn伦将对方挤到边界处获胜

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;

void solve()
{
	int n,m;cin>>n>>m;
	int xa,ya,xb,yb;cin>>ya>>xa>>yb>>xb;
	int diff=yb-ya;
	if(diff<=0){
		cout<<"draw"<<endl;
		return;
	}
	int turn=diff>>1;
	if(diff&1){
		if(xb>xa){
			xa=min(xa+turn+1,m);
			xb=min(xb+turn,m);
			if(xa>=xb)	cout<<"alice"<<endl;
			else	cout<<"draw"<<endl;
		}else{
			xa=max(xa-turn-1,1*1ll);
			xb=max(xb-turn,1*1ll);
			if(xa<=xb)	cout<<"alice"<<endl;
			else	cout<<"draw"<<endl;
		}
	}else{
		if(xa>xb){
			xa=min(xa+turn,m);
			xb=min(xb+turn,m);
			if(xa<=xb)	cout<<"bob"<<endl;
			else	cout<<"draw"<<endl;
		}else{
			xa=max(xa-turn,1*1ll);
			xb=max(xb-turn,1*1ll);
			if(xa>=xb)	cout<<"bob"<<endl;
			else	cout<<"draw"<<endl;
		}
	}
}

signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

F

根号分治
image
根号分治

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;

int f[330][100010],g[330][100010];

void solve()
{
	int n,q;cin>>n>>q;
	vector<int>a(n+1);
	rep(i,1,n){
		cin>>a[i];
	}
	//预处理出来模数比较小的情况
	int sq=sqrt(n);

	rep(i,1,sq){
		rep(j,1,n){
			f[i][j]=(j-i>=0?f[i][j-i]:0)+j/i*a[j];
			g[i][j]=(j-i>=0?g[i][j-i]:0)+a[j];
		}
	}
	
	while(q--){
		int s,d,k;cin>>s>>d>>k;
		//模数较小直接查询预处理的结果
		if(d<=sq){
			int ans=0;
			ans+=f[d][s+(k-1)*d]-(s-d>=0?f[d][s-d]:0);
			ans-=(s/d-1)*(g[d][s+(k-1)*d]-(s-d>=0?g[d][s-d]:0));
			cout<<ans<<' ';
		}else{
			//较大的话暴力去做
			int ans=0;
			for(int i=s,j=1;j<=k;i+=d,j++){
				ans+=j*a[i];
			}
			cout<<ans<<' ';
		}
	}
	cout<<endl;		
}
signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

标签:int,rep,Codeforces,long,cin,pair,920,Div,define
From: https://www.cnblogs.com/cxy8/p/18010358

相关文章

  • Codeforces div2 C题补题
    Codeforcesdiv2C题补题1922C.ClosestCitiesC.ClosestCities很容易看出,端点的两个城市的最近城市就是他的直接后继和直接前驱,而中间的城市的最近城市就是他前驱和后继中距离绝对值最小的那个,因此我们可以先预处理出每个城市对应的最近城市,用map存储。然后因为区间可以从......
  • 从BigDecimal的divide的异常说起
    在过去做项目的某一天中,突然有小伙伴说两个BigDecimal的数据相除(divide)报错了,觉得不可能,然后问他是怎么编写的,他说很简单呀,就是new了2个BigDecimal,然后相除的结果赋值给另外一个BigDecimal对象。听起来觉得没有问题,正常来说,2个Integer(int),2个Double(double)都不会报错,然后问是什么......
  • Codeforces Round 913 (Div. 3) G.
    题目链接G.把灯看成节点,灯之间的关系看成有向边得到基环树森林若节点的入度为0,那么它一定要用一次开关,这是可以确定的所以用拓扑,把这些确定贡献的节点删去然后就剩下了若干个环若环上有奇数个权值为1的节点,那么不可能全部关上对于环上一个打开的灯,它要么直接用自己的开关......
  • Codeforces Round 921 (Div. 1) 题解
    HelloAd-HocForces!A字符集为前\(k\)个小写字母,给定长度为\(m\)的字符串,求所有的长度为\(n\)的字符串是否是这个字符串的子串。(此处字串不连续)如果不是需要给出反例。\(1\len,k\le26\),\(1\lem\le1000\)。\(\sumn,\summ\le10^6\)sol.D1A就是神秘贪心,汗流浃背......
  • Codeforces Round 917 (Div. 2)
    https://codeforces.com/contest/1917A.LeastProduct*800给定整数数组,可以把数组中的数\(a_i\)改为\(0\sima_i\)中的任意整数,最小化所有数的乘积,在此基础上使操作次数最少讨论一下负数的个数和\(0\)的个数#include<bits/stdc++.h>usingnamespacestd;usingll......
  • left 3 Codeforces Round 913 (Div. 3)
    题目链接A.把同行同列除了起点都输出即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2e5+10;voidsolve(){charc;inta;cin>>c>>a;for(inti=1;i<=8;i++){if(i==a)continue;cout<<c<......
  • CodeCraft-22 and Codeforces Round 795 (Div. 2)C. Sum of Substrings(分类讨论、贪
    感觉分类讨论的能有点弱。遇到复杂一点的分类讨论的题目,代码就写的巨长。首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的。只有两端的两个位置是比较特殊的\(1位置处的1对答案的贡献是10\)\(2位置处的1对答案的贡献是1\)所有我们考虑将最左端第一......
  • SMU Winter 2024 div2 ptlks的周报Week 2(1.29-2.4)
    这周学习到的知识点有斯特林数(F鸡数题!)F鸡数题!思路第二类斯特林数代码#include<bits/stdc++.h>#defineintlonglong#defineMOD1000000007usingnamespacestd;intn,m,f[100005],fi[100005];intqpow(inta,intn){ intans=1; while(n){ if(n&1){ ......
  • CodeForces 1918E ace5 and Task Order
    洛谷传送门CF传送门世纪难题。首先我们考虑先固定\(x\),比如让\(x=a_1\)(重复问\(1\)直到回答为=),那么此时我们可以知道任意一个\(a_i\)和\(a_1\)的大小关系(问一次\(i\)再问一次\(1\)),并且可以知道\(a_i\)的具体值。那么剩下的数被分成了两个集合,一个\(<a_1\)......
  • left 2 Codeforces Round 916 (Div. 3)
    题目链接A.遍历字符串,用map记录下每个字符出现的次数最后遍历26个字母,若出现了相应次数答案+1#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;voidsolve(){intn;cin>>n;strings;cin>>s;map<char,int>mp;......