首页 > 其他分享 >CF1974题解

CF1974题解

时间:2024-11-11 10:33:02浏览次数:1  
标签:pr CF1974 int 题解 -- num && ph

闲话

1974年第一次在东南亚打自由搏击就取得了冠军······

CF1974A

简单计数题

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
signed main(){
	scanf("%lld",&t);
	while(t--){
		int x,y,ans=0,num=0;
		scanf("%lld%lld",&x,&y);
		ans+=y/2;
		if(y&1)  num+=4,ans++;
		num+=ans*7;
		if(x>num){
			ans+=(int)ceil((double)(x-num)/15.0);
		}
		printf("%lld\n",ans);
	}
}

CF1974B

洛谷题面翻译有误,建议自己看CF做题
照题面模拟即可,简单题

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int t,n;
int a[N],d[N];
char s[N];
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		scanf("%s",s+1);
		for(int i=1;i<=n;i++){
			a[i]=s[i]-'a'+1;
		}
		sort(a+1,a+1+n);
		int len=unique(a+1,a+1+n)-a-1;
		for(int i=1;i<=len;i++){
			int j=len-i+1;
			d[a[i]]=a[j];
		}
		for(int i=1;i<=n;i++){
			printf("%c",d[s[i]-'a'+1]+'a'-1);
		}
		printf("\n");
	}
}

CF1974C

注意仔细审题,让你求的时美丽的三元组对数

非常巧妙的一道题,使我的大脑停止运转

首先我们考虑如果要成为一个美丽三元组对,就要满足在这个三元对上有两个对应位置上元素相同所以我们设两个三元组为 \(\{a,b,c\}\) 和 \(\{d,e,f\}\) 我们分别记录下 \(\{a,b\}==\{d,e\},\{a,c\}==\{d,f\},\{b,c\}==\{e,f\}\) 的个数设为 \(x,y,z\)

但是考虑到有可能有 \(\{a,b,c\}==\{d,e,f\}\) 的情况,所以我们在设一个 \(k\) 为这种情况的个数,因为这种情况会被前面连续统计三遍,所以最终答案即为 \(x+y+z-3*k\)

点击查看代码
#include<bits/stdc++.h>
#define pii pair<int,int>
#define int long long
using namespace std;
const int N=2e5+5;
int t,n;
int a[N];
map<pii,int>f,s,e;
map<pair<int,pii>,int>c;
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		for(int i=1;i<=n;i++){
			scanf("%lld",&a[i]);
		}
		f.clear();
		s.clear();
		e.clear();
		c.clear();
		int ans=0;
		for(int i=3;i<=n;i++){
			ans+=f[{a[i-2],a[i-1]}];
			f[{a[i-2],a[i-1]}]++;
			ans+=s[{a[i-1],a[i]}];
			s[{a[i-1],a[i]}]++;
			ans+=e[{a[i-2],a[i]}];
			e[{a[i-2],a[i]}]++;
			ans-=c[{a[i-2],{a[i-1],a[i]}}]*3;
			c[{a[i-2],{a[i-1],a[i]}}]++;
		}
		printf("%lld\n",ans);
	}
}

CF1974D

一道水题

sb题面翻译漏掉了一条重要信息导致我卡了好久

两个物体均要进行移动,不能只有一个物体动,例如样例中第4个SN的情况就不行。

珍爱生命,别看翻译

然后就手模一下就知道,我们把 NS,EW 捆绑在一起,分给同一个机器人,剩下的多的就平分给两个机器人,若剩下的是奇数无法平分就NO

还有要特判只有一个机器人动的情况,再把它捆绑的步数,就是一组NS或EW分给另一个机器人就可以了

代码实现有点复杂,我写了100行

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int t,n;
int a[N],pr[N],ph[N];
char s[N];
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		scanf("%s",s+1);
		int u=0,d=0,l=0,r=0;
		for(int i=1;i<=n;i++){
			if(s[i]=='N')  a[i]=1,u++;
			if(s[i]=='S')  a[i]=2,d++;
			if(s[i]=='E')  a[i]=3,l++;
			if(s[i]=='W')  a[i]=4,r++;
		}
		if(l>=r){
			int num=l-r;
			if(num&1){
				printf("NO\n");
				continue;
			}
			pr[3]=num/2+r;
			ph[3]=num/2;
			pr[4]=r;
			if(num==0&&r>1){
				pr[3]--;pr[4]--;
				ph[3]++;ph[4]++;
			}
		}
		else{
			int num=r-l;
			if(num&1){
				printf("NO\n");
				continue;
			}
			pr[4]=num/2+l;
			ph[4]=num/2;
			pr[3]=l;
			if(num==0&&l>1){
				pr[4]--;pr[3]--;
				ph[4]++;ph[3]++;
			}
		}
		if(u>=d){
			int num=u-d;
			if(num&1){
				printf("NO\n");
				continue;
			}
			ph[1]=num/2+d;
			pr[1]=num/2;
			ph[2]=d;
			if(num==0&&d>1){
				ph[1]--;ph[2]--;
				pr[1]++;pr[2]++;
			}
		}
		else{
			int num=d-u;
			if(num&1){
				printf("NO\n");
				continue;
			}
			ph[2]=num/2+u;
			pr[2]=num/2;
			ph[1]=u;
			if(num==0&&u>1){
				ph[1]--;ph[2]--;
				pr[1]++;pr[2]++;
			}
		}
		if(!pr[1]&&!pr[2]&&!pr[3]&&!pr[4]){
			printf("NO\n");
			continue;
		}
		if(!ph[1]&&!ph[2]&&!ph[3]&&!ph[4]){
			printf("NO\n");
			continue;
		}
		for(int i=1;i<=n;i++){
			if(pr[a[i]]){
				printf("R");
				pr[a[i]]--;
			}
			else{
				printf("H");
				ph[a[i]]--;
			}
		}
		printf("\n");
	}
}

标签:pr,CF1974,int,题解,--,num,&&,ph
From: https://www.cnblogs.com/zcxnb/p/18539219

相关文章

  • [CodeForces] CF1978 题解
    A.AliceandBooksLink-CFLink-Luogu【题目大意】\(n\)本书,编号为\(1\)到\(n\),价值为\(a_1\)到\(a_n\)。将这些书分成两堆,你获得每堆编号最大的书的价值。求可以获得的最大的价值。【解题思路】无论怎样,编号为\(n\)的书不管在那一堆都是编号最大的,所以一定会有它......
  • luogu-P3262题解
    简要题意有一棵不超过十层的满二叉树,需要对每个节点进行染色。每个叶子节点会对其颜色相同的祖先节点产生贡献且黑白贡献不同。求最大贡献。题解首先我会暴力!我如果直接暴力枚举每个节点的颜色,复杂度就是\(O(2^{2^n})\)。然后还要算贡献,所以还有一个\(O(2^{n-1}(n-1))\)。然......
  • CF 1365 题解
    CF1365题解APrimeSubtraction任何数的因数中都会有质数,除非他是\(1\).因此原题不合法当且仅当\(b-a=1\).BKill'EmAll首先,答案有明确的下界:最右面的怪兽一定要处理.不断模拟去杀掉当前最靠右的怪兽,得到的答案就是答案的下界.是否能取到下界呢?答案是肯定......
  • CF622E Ants in leaves 题解
    传送门给定一棵\(n\)个节点的树,根节点是\(1\)。这棵树的每一个叶节点都有一只小蚂蚁。每过\(1\)秒钟,可以选择让一些蚂蚁向父节点走一步。注意,两只蚂蚁不能同时在一个除去根节点的节点上。问这些蚂蚁最少用多少秒的时间,使得所有蚂蚁都走到根节点。根结点的各个子树独立,因......
  • ABC372D ABC379F 题解 单调栈二分
    ABC372DABC379F题解单调栈二分一直觉得AT上面学到的东西比CF要多一些,无意捧一踩一,但可能是我太菜的原因,毕竟ABC的题目普遍要比Div.2简单一些。好多次碰到这个单调栈里面二分的trick了,所以写一篇来总结一下。ABC372D形象地给定一系列Buildings的高度\(h\),保证每个......
  • P2123 皇后游戏 / [USACO12JAN] Mountain Climbing S / P1248 加工生产调度 题解
    P2123皇后游戏/[USACO12JAN]MountainClimbingS/P1248加工生产调度先来看P2123。我们把这个特别重要的公式打出来:\[c_{i}=\begin{cases}a_{1}+b_{1}&,i=1\\\displaystyle\max\left\{c_{i-1},\sum_{j=1}^{i}a_{j}\right\}+b_{i}&,2\leqi\leqn\end{......
  • 历年CSP-J初赛真题解析 | 2019年CSP-J初赛完善程序(34-43)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客矩阵变幻有一个奇幻的矩阵,在不停的变幻,其变幻方式为:数字0变成矩阵[......
  • [NOIP2012 提高组] 国王游戏 题解
    [NOIP2012提高组]国王游戏典贪心。设当前点为\(i\),\(\prod_{k=0}^{i-1}a_k\)为\(x\),则对于\(i,j\)两点的答案:(为了方便,记\(i+1=j\))\[\mathit{res}_1=\max\bigg(\dfracx{b_i},\dfrac{xa_i}{b_j}\bigg)~;\]若交换,则:\[\mathit{res}_2=\max\bigg(\dfracx{b_j},\dfrac{......
  • [luogu1248] 加工生产调度 题解
    考虑\(i\)排在\(j\)前的条件是\(a_i+\max(a_j,b_i)+b_j\lea_j+\max(a_i,b_j)+b_i\),然后发现这一坨东西是皇后游戏中的倒数第三个式子,直接转化为\(\min(a_j,b_i)\ge\min(a_i,b_j)\),然后就按皇后游戏中的排序方法就可以了……#include<bits/stdc++.h>#defineintlonglong......
  • [luogu1248] 加工生产调度 题解
    考虑\(i\)排在\(j\)前的条件是\(a_i+\max(a_j,b_i)+b_j\lea_j+\max(a_i,b_j)+b_i\),然后发现这一坨东西是皇后游戏中的倒数第三个式子,直接转化为\(\min(a_j,b_i)\ge\min(a_i,b_j)\),然后就按皇后游戏中的排序方法就可以了……#include<bits/stdc++.h>#defineintlonglong......