首页 > 其他分享 >牛客周赛 Round 70 个人题解

牛客周赛 Round 70 个人题解

时间:2024-12-03 21:12:36浏览次数:6  
标签:周赛 int 题解 void cin 牛客 solve include define

牛客周赛 Round 70 个人题解 (A~G)

牛客周赛 Round 70

A. 小苯晨跑

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void solve(){
	int a,b,c,d;cin>>a>>b>>c>>d;
	if(a==b && b==c && c==d){
		cout<<"NO"<<endl;
	}
	else cout<<"YES"<<endl;

}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

B. 小苯过马路

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void solve(){
	int x,y,k,t;
	char c;
	cin>>x>>y>>k>>t>>c;
	if(c=='G'){
		int ans=0;
		if(k>=t) ans=t;
		else ans=t+k+x;
		cout<<ans<<endl;
	}
	else if(c=='R'){
		int ans=k+t;
		cout<<ans<<endl;
	}

}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
	while(T--) solve();
	return 0;
}

C. 小苯的字符串染色

题目分析

  • 因为操作次数不大于n,所以直接对每个黑块染色即可
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void solve(){
	int n;cin>>n;
	string s;cin>>s;
	s=" "+s;
	int tot=0;
	for(int i=1;i<=n;i++){
		if(s[i]=='1') tot++;
	}
	cout<<tot<<endl;
	for(int i=1;i<=n;i++){
		if(s[i]=='1'){
			cout<<i<<" "<<i<<endl;
		}
	}
}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

D. 小苯的能量项链

题目分析

  • 维护前缀max 与后缀max,O(n)查询即可
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=5e5+10;
int a[N],pre[N],suf[N];
void solve(){
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	if(n==1){
		cout<<a[1]<<endl;
		return;
	}
	else if(n==2){
		cout<<a[1]+a[2]<<endl;
		return;
	}
	pre[0]=0,suf[n+1]=0;
	for(int i=1;i<=n;i++){
		pre[i]=max(a[i],pre[i-1]);
	}
	for(int i=n;i>=1;i--){
		suf[i]=max(a[i],suf[i+1]);
	}
	int ans=0;
	for(int i=1;i<=min(n-1,k+1);i++){
		int l=i;
		int r=max(i+1,n-k+i-1);
		int c1=pre[l],c2=suf[r];
		ans=max(ans,c1+c2);
	}
	cout<<ans<<endl;
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

E. 小苯的最短路

题目分析

  • 考察异或性质的一道题,和之前 cf一道题类似codeforces.com/contest/2036/problem/F

  • f[l,r]表示l xor l+1 xor ... xor r

    • 当r%4==0时,f[0,r]=n
    • 当r%4==1时,f[0,r]=1
    • 当r%4==2时,f[0,r]=n+1
    • 当r%4==3时,f[0,r]=0
  • 由于是完全图,所以点1到每个点的最短路就是两点的边,所以经过化简后可得,ans=f[1,n] xor n个1的xor和

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
void solve(){
	int n;cin>>n;
	int t=0;
	if(n%4==0) t=n;
	else if(n%4==1) t=1;
	else if(n%4==2) t=n+1;
	else if(n%4==3) t=0;
	if(n%2==0){
		cout<<t<<endl;
	}
	else{
		int ans=1^t;
		cout<<ans<<endl;
	}
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

F. 小苯的优雅好序列

题目分析

  • 题解的证明很好,这里引用一下
  • 首先不难发现,如果要满足这个数组的所有连续子数组都优秀,那么相邻两个数一定要满足条件,即a[i]|a[i+1]或者a[i+1]|a[i]
  • image-20241203205719781
  • 推出该式子后,只需找到相邻两项最大的d,然后枚举他的因数,再暴力check即可
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=5e4+10;
int a[N];
void solve(){
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int maxn=1e18,idx=0;
	for(int i=2;i<=n;i++){
		int tmp=abs(a[i]-a[i-1]);
		if(tmp && tmp<maxn){
			maxn=tmp;
			idx=i;
		}
	}
	if(maxn==1e18){
		cout<<k<<" "<<k*(k+1)/2<<endl;
		return;
	}
	int num=min(a[idx],a[idx-1]);
	vector<int> v;
	for(int i=1;i*i<=maxn;i++){
		if(maxn%i!=0) continue;
		int x=i-num;
		if(x>0 && x<=k) v.push_back(x);
		if(maxn/i!=i){
			int t=maxn/i;
			int _x=t-num;
			if(_x>0 && _x<=k) v.push_back(_x);
		}	
	}
	int cnt=0,ans=0;
	for(auto x:v){
		bool flag=1;
		for(int i=2;i<=n;i++){
			int t1=a[i-1]+x;
			int t2=a[i]+x;
			if(t1%t2 && t2%t1){
				flag=0;
				break;
			}
		}
		if(flag){
			cnt++;
			ans+=x;
		}
	}
	cout<<cnt<<" "<<ans<<endl;
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

标签:周赛,int,题解,void,cin,牛客,solve,include,define
From: https://www.cnblogs.com/personaowl/p/18585052

相关文章

  • 题解:AT_arc139_d [ARC139D] Priority Queue 2
    题面发现我们不好算到最后还剩些什么。考虑计算\(\sum\limits_{i=1}^m\sum\limits_{j=1}^n[s_j\gei]\),容易发现这和原式等价。记\(b_i\)表示\(s\)中不小于\(i\)的数的个数,每次删去第\(x\)小的等价于将所有超过\(n-x+1\)的地方减1,加入\(k\)等价于将\(b_{1,k}\)......
  • 常见问题解决 --- nginx反向代理接口返回404
    可能原因反向代理地址写错了,还有一种可能是没有配置host请求头,导致不能正确找到服务器解决办法:修改nginx反向代理,配置虚拟主机名称,配置举例server{listen8082;server_name172.16.68.3;root/usr/local/nginx/html/;location......
  • P3750 [六省联考 2017] 分手是祝愿 题解
    P3750[六省联考2017]分手是祝愿题面ZeitundRaumtrennendichundmich.时空将你我分开。B君在玩一个游戏,这个游戏由\(n\)个灯和\(n\)个开关组成,给定这\(n\)个灯的初始状态,下标为从\(1\)到\(n\)的正整数。每个灯有两个状态亮和灭,我们用\(1\)来表示这个灯......
  • 第六届金盾信安杯Web题解
    比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP分别是  fillllll_put   hoverfly  ssrffillllll_put涉及:绕过exit()死亡函数php://filter伪协议配合base64加解密 一句话木马题目源码:$content参数在开头被拼接......
  • [题解](更新中)NOIP 2024 T1~T2
    编辑字符串(edit)初见感觉像贪心,但在不好写+不会证的情况下放弃了,然后想到DP又设不出状态。实际上……就是贪心哦?下文称\(s_1,s_2\)分别为\(a,b\)。不难发现一个不存在锁定位置的区间,其内元素是可以任意交换的。所以我们可以按照锁定位置,将两个字符串划分成若干个区间(被锁定......
  • CF1778D - Flexible String Revisit 题解
    CF1778D-FlexibleStringRevisit题面给出两个长度均为\(n(n\leq10^6)\)的01串\(S\)和\(T\)每次随机将\(S\)中的某一位取反问:第一次\(S=T\)时操作次数的期望题解成环期望的小\(\text{trick}\),可以避免高斯消元和高阶递推。如果我们按照经典的期望\(dp\)......
  • 题解:CF176B Word Cut
    https://www.luogu.com.cn/problem/CF176B没看懂其他题解为什么说"可以发现,只要能从一个串变成一个串,都可以通过仅一次变换得到"。转化将题目中的操作转化一下:对于一个串\(s\),将串\(s\)复制一份接到\(s\)末尾,然后选择一段长度\(n\)的子串。发现:经过一次操作后,接下来......
  • 题解:AT_abc138_f [ABC138F] Coincidence
    https://www.luogu.com.cn/problem/AT_abc138_f对于\(x\ley\):若\(2x\ley\),则\(y-x>y\bmodx\)。若\(2x>y\),则\(y-x=y\bmodx\)。有\(x\oplusy\gey-x\)。当\(2x\ley\)时,不可能存在\(y\bmodx=x\oplusy\)了。现......
  • 题解:AT_abc372_f [ABC372F] Teleporting Takahashi 2
    https://www.luogu.com.cn/problem/AT_abc372_f简单易懂易写。考虑一步一步走。要么顺着环走,要么走那\(m\)条边。设\(id(k,i)=(i-1-k)\bmodn+1\)。设\(g_{k,id(k,i)}\)表示走了\(k\)步走到\(i\)的方案数。这样设计下标就不需要管顺着环走了。顺着环走......
  • 题解:CF843D Dynamic Shortest Path
    https://www.luogu.com.cn/problem/CF843DluoguRMJ加油.......如果每修改一次就dij复杂度\(O(q(n+m\logn))\)过不去的。暴力dij是因为值域很大需要用到堆,带个log,要是值域很小就可以直接分层BFS了……每次增加的边权很小,求最短路增量?设\(dis_i\)表示这次修......