首页 > 其他分享 >牛客周赛 Round 31(A~F)

牛客周赛 Round 31(A~F)

时间:2024-02-04 23:46:44浏览次数:25  
标签:tar rep int 31 long 牛客 pair Round define

目录


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 ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2e5+10;

void solve()
{
	string s;cin>>s;
	if(s=="kou")	s="yukari";
	cout<<s<<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

#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 ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2e5+10;

void solve()
{
	int n;cin>>n;
	
	auto check=[&](int tar)
	{
		if(tar==1)	return false;
		rep(i,2,tar/i)	if(tar%i==0)	return false;		
		return true;
	};
	int ans=0;
	for(int i=1;i<=n/i;++i)
	{
		if(n%i==0)
		{
			if(check(i))	ans++;
			if(i==n/i)	continue;
			if(check(n/i))	ans++;
		}
	}
	cout<<ans<<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;
}

C


c题比较有用的应该还是得有贡献法这种思想。


#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 ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2e5+10;

void solve()
{
	int n;cin>>n;
	char c;cin>>c;
	string s;cin>>s;
	int ans=0;
	rep(i,0,s.size()-1)
	{
		if(s[i]==c)	ans+=min(i+1,n-i);	
	}
	cout<<ans<<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;
}


D


链表的模板。
需要注意的是这题的数据范围\(x、y给到了1e9\)不能用数组去模拟,直接用map去模拟


#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 ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2e5+10;

map<int,int> l,r;

void solve()
{
	int q;cin>>q;
	r[0]=1e9+1;l[1e9+1]=0;
	auto add=[&](int now,int tar)
	{
		l[now]=tar;r[now]=r[tar];
		l[r[tar]]=now; r[tar]=now;
	};
	auto remov=[&](int tar)
	{
		r[l[tar]]=r[tar];
		l[r[tar]]=l[tar];	
	};
	while(q--)
	{
		int op;cin>>op;
		if(op==1)
		{
			int x,y;cin>>x>>y;
			add(x,y);	
		}
		else
		{
			int x;cin>>x;
			remov(x);
		}
	}
	int cnt=0;
	for(int i=r[0];i!=1e9+1;i=r[i])	cnt++;
	cout<<cnt<<endl;
	for(int i=r[0];i!=1e9+1;i=r[i])	cout<<i<<' ';
	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;
}


E


这道题目也是一道比较经典的dp。
没看出来.
\(dp[i][j]:表示对前i个数进行操作,总和为j的最小操作次数\)
\(转移:dp[i][j]=min(dp[i][j+a[i]],dp[i][j-a[i]]+1)\)
\(初始化:dp[0][40000]=0,其余均是无穷大\)
注意这道题目有负数,可以将dp数组开成mp,但是最好不要这么去做,因为mp有个\(log\)
一般的做法是加上一个偏移量使每个数都变成正数。


#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 ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=80010;

int dp[210][N];

void solve()
{
	int n;cin>>n;
	memset(dp,0x3f,sizeof(dp));
	dp[0][40000]=0;
	rep(i,1,n)	
	{
		int xx;cin>>xx;
		rep(j,0,80000)
		{
			if(j+xx>=0&&j+xx<=80000)	dp[i][j]=min(dp[i][j],dp[i-1][j+xx]);
			if(j-xx>=0&&j-xx<=80000)	dp[i][j]=min(dp[i][j],dp[i-1][j-xx]+1);
		}
	}
	if(dp[n][40000]>=n)	cout<<-1;
	else cout<<dp[n][40000]<<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;
}


F


今天下午在补寒假营的题,里面有道用道第二类斯特林数的知识点还没补完,刚好这道题也是组合数学的就补一下,尽快把组合数学的知识点给补一下吧。
思路:
对于连续段的个数的枚举是少不了的因为这是答案
然后考虑对于i个连续段的情况。
我们的目标串可能是什么样的。
\(aaabbbb...aa..bba...\)
\(bbbaaab....aa..bb...\)
要么是a开头要么是b开头。然后连续若干个b连续若干个a
如果是a开头,分成i段那么a的段可能会比b多一点,因为a先出现,奇数的话就是a多,否则两者段一样多,那么a的段数用\(ca表示ca=i/2+i%2,cb=i-ca\)
考虑如何将x个a分成ca份,并且每份都不空:显然可以用隔板法
关于隔板法:隔板法
y分成cb份并且每份都不空。两者应用乘法原理相乘
b开头情况是一样的。
a、b开头是两种不同的情况,用加法原理就是段数为i的情况。

代码参考兰子哥的。


#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 ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2010;

int jc[N],mod=1e9+7;

void solve()
{
	auto qmi=[&](int a,int b,int p)
	{
		int res=1;
		while(b)
		{
			if(b&1)	res=res*a%p;
			b>>=1;
			a=(a*a)%p;
		}
		return res;	
	};
	jc[0]=1;
	rep(i,1,2000)	jc[i]=jc[i-1]*i%mod;	
	
	auto C=[&](int n,int m)
	{
		if(m<0||n-m<0||n<0)	return 1ll*0;
		return 	jc[n]*qmi(jc[m],mod-2,mod)%mod*qmi(jc[n-m],mod-2,mod)%mod;
	};
	int x,y;cin>>x>>y;
	
	rep(i,1,x+y)
	{
		int ca=i/2;
		int cb=i-ca;
		ll ans=0;
		ans=(ans+(C(x-1,ca-1)*C(y-1,cb-1))%mod)%mod;
		swap(ca,cb);
		ans=(ans+(C(x-1,ca-1)*C(y-1,cb-1))%mod)%mod;
		cout<<ans<<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;
}

标签:tar,rep,int,31,long,牛客,pair,Round,define
From: https://www.cnblogs.com/cxy8/p/18007130

相关文章

  • 牛客周赛 Round 31(很菜的小白)
    A.小红小紫替换思路:签到题,字符串如果是kou就替换成yukari取余不变解法:无Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;std::cin>>s;std::cout<<(s=="kou"?"yukari\n":s)<<'\n&#......
  • 2024牛客寒假算法基础集训营1 J 又鸟之亦心 题解
    Question2024牛客寒假算法基础集训营1J又鸟之亦心Solution挺好的一个题,给了我很多启发显然,先二分最大值\(D\),关键在于\(check\)怎么写考虑到两个人是相对的,第\(i\)次之后肯定有一个人在\(a_i\),具体是谁不重要,也不需要关注是怎么走过来的,我们需要去维护另外一个人可......
  • Codeforces Round 917 (Div. 2)
    https://codeforces.com/contest/1917A.LeastProduct*800给定整数数组,可以把数组中的数\(a_i\)改为\(0\sima_i\)中的任意整数,最小化所有数的乘积,在此基础上使操作次数最少讨论一下负数的个数和\(0\)的个数#include<bits/stdc++.h>usingnamespacestd;usingll......
  • 2024牛客寒假算法基础集训营1 K 牛镇公务员考试 题解
    Question2024牛客寒假算法基础集训营1K牛镇公务员考试给出一张试卷有\(n\)道单选题,每道题用一个整数\(a_i\)和一个长度为\(5\)的字符串\(s_i\)表示,其中第\(i\)道题的题面为:第\(a_i\)道题的答案是()A.\(s_1\)B.\(s_2\)C.\(s_3\)D.\(s_4\)E.\(s_5\)问:正......
  • 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<......
  • Luogu「Daily OI Round 3」Simple 题解
    #include<iostream>#include<cstdio>#include<queue>#include<algorithm>#include<cstring>#include<string>#include<string.h>#include<vector>#defineintlonglong#definerep(a,b,c)for(autoa=b;a......
  • NSSRound16
    NSSRound16RCE但是没有完全RCE审题审核代码,简单的md5绕过。知识点md5绕过,命令组合,shell里``中的内容会被当成代码执行知识详解md5等于的绕过方法数组绕过a[]=1&b[]=2,0e绕过弱比较,md5后的值以0e开头即可绕过。$a==md5$a=0e215962017其md5后的值也为0e开头......
  • CodeCraft-22 and Codeforces Round 795 (Div. 2)C. Sum of Substrings(分类讨论、贪
    感觉分类讨论的能有点弱。遇到复杂一点的分类讨论的题目,代码就写的巨长。首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的。只有两端的两个位置是比较特殊的\(1位置处的1对答案的贡献是10\)\(2位置处的1对答案的贡献是1\)所有我们考虑将最左端第一......
  • [MY-013183] [InnoDB] Assertion failure: dict0dict.cc:1869:table->get_ref_count()
    背景:执行altertableTABLE_NAMEdroppartitionPART_NAME;时执行过程中执行了ctrl+c导致mysql服务器崩溃自动重启。mysql错误日志内容:2024-02-02T10:30:32.424737+08:00460639464[ERROR][MY-013183][InnoDB]Assertionfailure:dict0dict.cc:1869:table->get_ref_count......
  • FastAPI学习-31 FastAPI 如何集成 socket.io
    前言socket.io就是基于websocket封装的一个库,主要特点是能够进行实时的双向通讯,主要应用场景有实时的聊天,数据实时分析,数据传输,文件协同合作。有个socket.io的fastapi-socketio官方库,该库依赖传统的python-socketio库环境准备pipinstallfastapi-socketiofastapi服务端代码......