首页 > 其他分享 >0511CF补题

0511CF补题

时间:2024-05-12 16:30:36浏览次数:24  
标签:return 0511CF int void long solve 补题 include

知识点模块

1.初始化一个有30位个1的二进制位
int a=(1<<30)-1

B. AND Sorting
这题我们发现将样例中的每个位置不匹配的按顺序与下去,得到的就是结果,猜一猜写一下,学习一下使用二进制数1111111111.....的初始化

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	int n;
	cin>>n;
	int ans= (1<<30) -1;//初始化一个很长的111111111 
	//其实他们的解释我也听不懂
	//但是反正每个位置不同的数与一下就是样例的结果
	//猜着猜着来吧 
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		if(x!=i) ans&=x;
	}
	cout<<ans<<endl;
}


signed main()
{
  	int t=1;
  	cin>>t;
  	while(t--) solve();
  	return 0;
}

C. 3SUM Closure
1.假如有n个数,里面至少有3个数a>b>c>0,那么a+b+c>a是肯定的,这个元素肯定不符合题意,那么三个负数也是同理的。
2.我们注意到当三个数为0 0 x的时候,无论你的x是任何数,都是符合题意的,那么如果有很多个0和x,只需要取1个0,怎么理解呢,如果我们是-2,2,0,0其实和-2 2 0是等价的,举其他例子也是同理。
3.综上,我们其实最多只能取到两个正数,两个负数和一个0的情况,为什么一定要有1个0呢?因为我举不出来没有0可以符合的情况。
所以我们只需要检查一下,有没有0,检查一下有几个正数负数,检查完以后再暴力遍历验证一下就可以

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	int n,markz=0,markf=0,zero=0,check=1;
	cin>>n;
	vector<int>ve;
	map<int,int>mp;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		if(x>0) {
			if(++markz<3) ve.push_back(x),mp[x]=1,check=0;
		}
		else if(x<0)
		{
			if(++markf<3) ve.push_back(x),mp[x]=1,check=0;
		}
		else if(++zero==1) ve.push_back(x),mp[x]=1;
	}
	//如果有三个及以上正数或者三个及以上负数都不符合
	//因为a+b+c>a(a最大) 负数同理 
	//由于0 0 x当x取任何数都符合情况,所以当有多个0的时候,我们只需要把一个放入数组即可 
	if(markz>=3||markf>=3) {
		cout<<"NO"<<endl;
		return ;
	}
	if(check==1) {
		cout<<"YES"<<endl;
		return;
	}
	for(int i=0;i<ve.size();i++)
	{
		for(int j=i+1;j<ve.size();j++)
		{
			for(int k=j+1;k<ve.size();k++)
			{
				if(mp[ve[i]+ve[j]+ve[k]]==0) {
					cout<<"NO"<<endl;
					return;
				}
			}
		}
	 } 
	
	cout<<"YES"<<endl;
}


signed main()
{
  	int t=1;
  	cin>>t;
  	while(t--) solve();
  	return 0;
}

B. Different String
这一题只要检查一下是否全部为一个字母即可,如果有不同的字母,我们就把第一个和从0开始的第一个字母不同的字母标记一下,然后从标记处开始输出再输出0到标记处实现交换,当然可以参考官方的解答,遇到不同的两两交换也是行的
1.我自己的代码

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	string s;
	cin>>s;
	int pos=0,flag=0,cnt=0;
	map<char,int>mp;
	for(int i=0;i<s.size();i++)
	{
		if(mp[s[i]]==0){
			cnt++;
			mp[s[i]]++;
		}
		if(s[i]!=s[0]&&flag==0)
		{
			pos=i;
			flag=1;
		}
	}
	if(cnt==1) cout<<"NO"<<endl;
	else {
		cout<<"YES"<<endl;
		for(int i=pos;i<s.size();i++) cout<<s[i];
		for(int i=0;i<pos;i++) cout<<s[i];
		cout<<endl;
	}
	
}


signed main()
{
  	int t=1;
  	cin>>t;
  	while(t--) solve();
  	return 0;
}

C. Clock and Strings
这题的思路是化曲为直,其实我们可以想象一下,把圆从12处拉开成一条直线,那么如果两条直线相交则一定区间一定会有重叠的部分,那么不相交的只有包含关系和两者没有重叠部分的关系,所以只需要取一下两点的最大最小值讨论一下即可

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	int max1=max(a,b),max2=max(c,d),min1=min(a,b),min2=min(c,d);
	if(min1>min2&&max1<max2||min2>min1&&max2<max1) cout<<"no"<<endl;
	else if(max1<min2||max2<min1) cout<<"no"<<endl;
	else cout<<"yes"<<endl;
	
	
}


signed main()
{
  	int t=1;
  	cin>>t;
  	while(t--) solve();
  	return 0;
}

D. Binary Cut
1.想要把序列弄成由0到1的有序排列,我们一定要有01这种连接的部分,而且只需要一个这种连接的部分即可,当然它可以是00001,001,000001等等
2.当我们从左往右遍历字符串的时候,我们只要遇到一个与上一个字符不同的,便是一个数据块(只有0和只有1的数字块),那么答案就是数据块的数量,再看有无01类似这样的连接块,有的话就是数据块-1,没有就是数据块的数量

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	string s;
	cin>>s;
	int res=0;
	bool check=0;
	for(int i=0;i<s.size();i++)
	{
		res+=(s[i]!=s[i+1]);
		if(s[i]=='0'&&s[i+1]=='1') check=1;
	}
	cout<<res-check<<endl;
	
}


signed main()
{
  	int t=1;
  	cin>>t;
  	while(t--) solve();
  	return 0;
}

E. Find the Car
1.因为给出的每个已知点间的每一段速度是固定的,所以我们的思路就是先二分出第一个大于等于该查询值的路程下标,然后该下标-1,便是第一个小于该路程值已知点的下标,答案便是已知的花费时间+该段的差值/该段的固定速度,可以直接开int就能过

标签:return,0511CF,int,void,long,solve,补题,include
From: https://www.cnblogs.com/swjswjswj/p/18187164

相关文章

  • Codeforces Round 944 (Div. 4) 补题
    A.MyFirstSortingProblemYouaregiventwointegersxandy.Outputtwointegers:theminimumofxandy,followedbythemaximumofxandy.题意:给你两个整数求出最小值和最大值Code:#include<bits/stdc++.h> usingnamespacestd;#definedebug(x)cer......
  • ABC351E 补题笔记
    批:赛时很快想到切比雪夫后就跳进主席树里出不来了。一个很妙的题。首先分\(x+y\)的奇偶性黑白染色后黑色和白色不可达。然后对于同一个颜色的点易得\(dis=\max(|x1-x2|,|y1-y2|)\),即切比雪夫距离。这个时候就可以直接上主席树了,但太复杂不是正解。最简单的解法是:我们充分......
  • Codeforces Round 940 (Div. 2) and CodeCraft-23 (补题中的小白)
    A.Stickogon思路:Code:#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;cin>>n;map<int,int>mp;for(inti=1,x;i<=n;i++){cin>>x;mp[x]++;}intans=0;f......
  • Educational Codeforces Round 163 (Rated for Div. 2) 补题记录(A~A)
    A容易发现若\(S\)串中\(s_i\)为特殊字符,则令\(s_i=s_{i+1}\),此时\(s_i\neqs_{i-1}\)。则找到一个\(j\)满足\(s_i=s_{i+1}=s_{i+2}=\ldots=s_j\neqs_{j+1}\),则\(s_j\)也一定为特殊字符。所以若\(2\midn\)则构造\(\frac{n}{2}\)个AAB,否则必然无解。#include<......
  • CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!) 补题记录(A~A)
    A猜测结论。发现当且仅当\(k=1\)或者\(n=k\)时有解,否则无解。对于\(k=1\)时构造序列\(1,2,3,\ldots,n\)满足条件。对于\(k=n\)时构造序列\(1,1,1,\ldots,1\)满足条件。时间复杂度为\(O(n)\)。#include<bits/stdc++.h>#defineintlonglongusingnamespaces......
  • 2024牛客暑假多校第四场补题
    B每个堆的石子最多操作a[i]-1次#include<iostream>#include<fstream>#include<unordered_map>#include<vector>#include<cstring>#include<string>#include<queue>#include<stack>#include<algorithm>#includ......
  • 天梯赛真题补题单(L2-1 ~ L2-4)
    L2-1点赞狂魔#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=200200,M=2020,INF=0x3f3f3f3f;LLn;structnode{strings;LLsum;}a[N];boolcmp(nodel,noder){if(l.sum!=r.sum)......
  • CodeForces Round #939(Div. 2) 补题记录(A~D)
    ABCD首先考虑:对于\(a\)数组的任意一段区间\([l,r]\),都总有一种办法可以让这些数字全部变成\(0\)。构造:若\([l,r]\)一段区间全部为\(0\),则已经达成条件。否则,将所有\(x\in[l,r]\cap\textbf{N}_+\)的\(a_x\neq0\),都让\([x,x]\)这一段区间取\(\text{mex}\)。......
  • 2024SMUSpring天梯4补题
    L2-3:用扑克牌计算24点题意:思路:全排列枚举ordfs得到全排列。枚举方式和"飞机降落"一样。题目类似"电阻组合"那题。要注意的是要枚举3种东西:数字的全排列,符号的全排列,以及!括号的情况!。一开始括号只是考虑到样例那种情况,wa两个点。括号会影响除法的计算。总的来说:枚举出全排列......
  • 天梯赛真题补题单(L1-6 ~ L1-8)
    L1-6整除光棍(思维题)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=100200,M=2020;constdoublePI=3.141592;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);LLT=1;......