首页 > 其他分享 >牛客周赛 Round 65 题解

牛客周赛 Round 65 题解

时间:2024-11-02 10:41:28浏览次数:4  
标签:周赛 int 题解 牛客 65 Round define

牛客周赛 Round 65

牛客周赛 Round 65

A-超市_牛客周赛 Round 65

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void solve(){
	int n,a,b;cin>>n>>a>>b;
	int ans=0;
	for(int i=0;i<=100;i++){
		for(int j=0;j<=100;j++){
			if(i*a+j*b<=n){
				ans=max(ans,i+j);
			}
		}
	}
	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;
}

B-雨幕_牛客周赛 Round 65

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
char g[1010][1010];
void solve(){
	int n,m;cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>g[i][j];
		}
	}
	int ans=0;
	for(int i=1;i<=n-1;i++){
		for(int j=1;j<=m-1;j++){
			if(g[i][j]=='*' && g[i][j+1]=='*' && g[i+1][j]=='*' && g[i+1][j+1]=='*'){
				ans++;
			}
		}
	}
	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-闺蜜_牛客周赛 Round 65

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=1010;
int a[N];
void solve(){
	int n;cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	int sum1=0,sum2=0;
	swap(a[1],a[n]);
	for(int i=n;i>=1;i--){
		if(i%2==0){
			sum1+=a[i];
		}
		else{
			sum2+=a[i];
		}
	}
	if(sum1>sum2) cout<<"kou"<<endl;
	else if(sum1<sum2) cout<<"yukari"<<endl;
	else cout<<"draw"<<endl;
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

D-医生_牛客周赛 Round 65

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=1e5+10;
int a[N],b[30],pw[30];
struct node{
	int v,cnt;
}c[N];
void init(){
	pw[0]=1;
	for(int i=1;i<=30;i++){
		pw[i]=pw[i-1]*2;
	}
}
void solve(){
	int n,m;cin>>n>>m;
	for(int i=1;i<=n;i++){
		string s;cin>>s;
		int len=s.size();
		s=" "+s;
		int cnt=0;
		int num=0;
		for(int i=len;i>=1;i--){
			num+=(s[i]-'0')*pw[cnt];
			cnt++;
		}
		a[i]=num;
	}
//	for(int i=1;i<=n;i++) cout<<a[i]<<endl;
	int k;cin>>k;
	for(int i=1;i<=k;i++){
		string s;cin>>s;
		int len=s.size();
		s=" "+s;
		int cnt=0;
		int num=0;
		for(int i=len;i>=1;i--){
			num+=(s[i]-'0')*pw[cnt];
			cnt++;
		}
		b[i]=num;
	}
	int tot=0;
	int maxn=pw[k]-1;
	// for(int i=1;i<=k;i++) cout<<b[i]<<" ";
	// cout<<endl;
	for(int i=0;i<=maxn;i++){
		int num=0;
		int cnt=0;
		for(int j=0;j<=k-1;j++){
			if((i>>j)&1ll){
				num|=b[j+1];
				cnt++;
			}
		}
		c[++tot]={num,cnt};
	}
	// for(int i=1;i<=tot;i++) cout<<c[i].v<<endl;
	// cout<<endl;
	for(int i=1;i<=n;i++){
		int ans=1e9;
		for(int j=1;j<=tot;j++){
			if((a[i]&c[j].v)==a[i]){
				ans=min(ans,c[j].cnt);
			}
		}	
		if(ans==1e9) cout<<-1<<endl;
		else cout<<ans<<endl;
	}
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	init();
	int T=1;
	while(T--) solve();
	return 0;
}

E-降温(easy)_牛客周赛 Round 65

解题思路

  • 考虑贪心,要求最大值时,每一个问号都应该尽可能降低温度,所以a[i]=a[i-1]-x,但是如果超过了最小值,那么a[i]已无法提供一次贡献,那么则将a[i]设置为最大值maxn,让他为后面做贡献
  • 要求最小值时只需令a[i]=a[i-1]-x+1即可
  • E,F同理,仅有数据范围的差别
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
int a[110],b[110];
void solve(){
	int n,x;cin>>n>>x;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	int maxn=50,minn=-50,vis=-999;
	int ans1=0,ans2=0;
	for(int i=1;i<=n;i++){
        if(i==1){
            if(a[i]==vis) a[i]=maxn;
            continue;
        }
        if(a[i]!=vis){
            if(a[i-1]-a[i]>=x) ans1++;
        }
        else{
            if(a[i-1]-x>=minn){
                a[i]=a[i-1]-x;
                ans1++;
            }
            else a[i]=maxn;
        }
    }
    for(int i=1;i<=n;i++){
    	if(i==1){
    		if(b[i]==vis) b[i]=minn;
    		continue;
    	}
    	if(b[i]!=vis){
    		if(b[i-1]-b[i]>=x) ans2++;
    	}
    	else b[i]=max(minn,b[i-1]-x+1);
    }
	cout<<ans1<<" "<<ans2<<endl;
}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
	while(T--) solve();
	return 0;
}

F-降温(hard)_牛客周赛 Round 65

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=1e5+10;
int a[N],b[N];
void solve(){
	int n,x;cin>>n>>x;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	int maxn=5e8,minn=-5e8;
	int vis=-1*(int)999999999;
	int ans1=0,ans2=0;
	for(int i=1;i<=n;i++){
        if(i==1){
            if(a[i]==vis) a[i]=maxn;
            continue;
        }
        if(a[i]!=vis){
            if(a[i-1]-a[i]>=x) ans1++;
        }
        else{
            if(a[i-1]-x>=minn){
                a[i]=a[i-1]-x;
                ans1++;
            }
            else a[i]=maxn;
        }
    }
    for(int i=1;i<=n;i++){
    	if(i==1){
    		if(b[i]==vis) b[i]=minn;
    		continue;
    	}
    	if(b[i]!=vis){
    		if(b[i-1]-b[i]>=x) ans2++;
    	}
    	else b[i]=max(minn,b[i-1]-x+1);
    }
	cout<<ans1<<" "<<ans2<<endl;
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
	while(T--) solve();
	return 0;
}

G-乌鸦_牛客周赛 Round 65

解题思路

  • 构造题,相邻位置只能相差1,那我们不妨假设一开始构造101010101即奇数位放一,或者0101010101即偶数位放一
  • 当第一层搭好后,我们不难发现,接下来相当于要每次添加一个1x2的砖块,并且一定是1x2的,如果打好第一层后的砖块数量不能满足为偶数的话,即输出-1
  • 那么我们可以先循环的放n轮全放的(这意味着n轮结束后顶部情况会和第一层情况保持一致),然后我们只需对剩下的砖块进行摆放即可。
  • 为了方便判断,此处给出两种地基的实现方式都进行计算,如有一种满足即可。
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=1e5+10;
int n,m;
int a[N];
bool flag=0;
//初始1 3 5 7奇数位放一
void work1(){
	vector<int> a(n+1,0);
	int res=m;
	for(int i=1;i<=n;i+=2){
		a[i]++,res--;
	}
	if(res<0 || res%2==1) return;
	res/=2;
	int round=res/n;
	res%=n;
	for(int i=2;i<=n;i+=2){
		if(res<=0) break;
		a[i]+=2,res--;
	}
	for(int i=1;i<=n;i+=2){
		if(res<=0) break;
		a[i]+=2,res--;
	}
	flag=1;
	for(int i=1;i<=n;i++) a[i]+=round*2;
	for(int i=1;i<=n;i++) cout<<a[i]<<" ";
	cout<<endl;
}
//初始2 4 6 8偶数位放一
void work2(){
	vector<int> a(n+1,0);
	int res=m;
	for(int i=2;i<=n;i+=2){
		a[i]++,res--;
	}
	if(res<0 || res%2==1) return;
	res/=2;
	int round=res/n;
	res%=n;
	for(int i=1;i<=n;i+=2){
		if(res<=0) break;
		a[i]+=2,res--;
	}
	for(int i=2;i<=n;i+=2){
		if(res<=0) break;
		a[i]+=2,res--;
	}
	flag=1;
	for(int i=1;i<=n;i++) a[i]+=round*2;
	for(int i=1;i<=n;i++) cout<<a[i]<<" ";
	cout<<endl;
}
void solve(){
	cin>>n>>m;
	work1();
	if(!flag) work2();
	if(!flag) cout<<-1<<endl;
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
	while(T--) solve();
	return 0;
}

标签:周赛,int,题解,牛客,65,Round,define
From: https://www.cnblogs.com/personaowl/p/18521701

相关文章

  • P3780 苹果树 题解
    传送门夏天近了,又到了恋爱的季节,小Q家门前的苹果树上结满了红红圆圆的苹果。这株苹果树是一个有着\(n\)个结点的有根树,其中结点被依次编号为\(1\)至\(n\)。\(1\)号结点为根,其余每一个结点的父结点一定是某个编号较小的结点。每一个结点上都有一些苹果,第\(i\)个结点上有\(a_i(a_......
  • 【轰炸题解】
    轰炸题目描述“我该怎么办?”飞行员klux向你求助。事实上,klux面对的是一个很简单的问题,但是他实在太菜了。klux要想轰炸某个区域内的一些地方,它们是位于平面上的一些点,但是(显然地)klux遇到了抵抗,所以klux只能飞一次,而且由于飞机比较破,一点起飞就只能沿直线飞行,无法......
  • Codeforces Round 983 div2 个人题解(A~D)
    CodeforcesRound983div2个人题解(A~D)Dashboard-CodeforcesRound983(Div.2)-Codeforces火车头#define_CRT_SECURE_NO_WARNINGS1#include<algorithm>#include<array>#include<bitset>#include<cassert>#include<cmath>#in......
  • SP30785 ADAAPPLE - Ada and Apple 题解
    洛谷题目传送门博客园可能食用更佳题目大意:给定一棵权值为\(0\)或\(1\)的树,\(n\)个点,\(q\)次操作:0i把结点\(i\)的权值取反;1ij询问点\(i\)到点\(j\)的最短路径上权值是否全为\(0\)或全为\(1\)。题目分析:树上操作,看了下操作发现是树剖板子题。开......
  • P5298 Minimax 题解
    传送门小\(C\)有一棵\(n\)个结点的有根树,根是\(1\)号结点,且每个结点最多有两个子结点。定义结点\(x\)的权值为:1.若\(x\)没有子结点,那么它的权值会在输入里给出,保证这类点中每个结点的权值互不相同。2.若\(x\)有子结点,那么它的权值有\(p_x\)的概率是它的子结点......
  • LeetCode题练习与总结:水壶问题--365
    一、题目描述有两个水壶,容量分别为 x 和 y 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 target 升。你可以:装满任意一个水壶清空任意一个水壶将水从一个水壶倒入另一个水壶,直到接水壶已满,或倒水壶已空。示例1: 输入:x=3,y=5,target=4输出......
  • E74 树形DP P4657 [CEOI2017] Chase
    视频链接:E74树形DPP4657[CEOI2017]Chase_哔哩哔哩_bilibili  P4657[CEOI2017]Chase-洛谷|计算机科学教育新生态(luogu.com.cn)//树形DPO(n*m)#include<bits/stdc++.h>#defineLLlonglongusingnamespacestd;constintN=100010,M=110;intidx,he......
  • AT_utpc2012_07 k番目の文字列 题解
    模拟赛搬了这个题,来写个题解。\(n\)这么小,不是状压就是很多很多维DP(暴论)。状压我没想出来,那就正常DP。考虑依次填入字符串的每个位置,记\(f(i,j,num,op)\)表示填了前\(i\)个位置,其中比\(s_0\)小的有\(j\)个,目前字典序比\(s\)小的子串有\(num\)个的方案数,\(op\)表......
  • 天津大学2024华为杯I.个大的大个 题解
    原题链接https://acm.tju.edu.cn/problem/P2040学校oj好像挂了,题解发不出去,又没有草稿功能,所以先存在这里了。前言华为杯时候对字符串不太熟,加上看错题了导致没做出这题,很可惜,苦练几个月,现在已经成为串串大师,回过头来秒一下这题发个题解泄恨。题意给定一个长为\(n\)的字符......
  • 2024御网线上Pwn方向题解
    ASMChecksec检查保护基本上保护都关闭了64位ida逆向程序只有一段,并且返回地址就是输入的数据,看起来就是srop了,找一下可以用的gadget通过异或清空rax值,然后通过异或ecx和1,异或rax和rcx即可增加rax的值,同理左移一位同样可以增加rax的值,将rax增加到0xf然后打srop,程序还给出了......