首页 > 其他分享 >2023牛客暑期多校训练营4

2023牛客暑期多校训练营4

时间:2023-07-31 11:45:53浏览次数:41  
标签:题意 正方形 int void 多校 dfs else 牛客 2023

A.Bobo String Construction

题意:给出一个01字符串t,要求构造一个长为n的01字符串s,使得新的字符串t+s+t不会有超过两个子串t

Solution

答案要么全0串要么全1串

带进去看看成不成立就行了

void solve()
{
	int n;cin>>n;
	string s0(n,'0');
	string s1(n,'1');
	string t;cin>>t;
	string t0=t+s0+t;
	if(t0.find(t,1)==t.size()+n)
	{
		cout<<s0<<"\n";
	}else
	{
		cout<<s1<<"\n";
	}
}

F.Election of the King

题意:有n个人参加国王选举,第i个人有一个政治倾向a[i],a[i]越小,他就越左倾,反之则越右倾,这些人进行n-1轮筛选,每一轮筛选可以每个人可以对一个人投票,票数最高的人被淘汰,票数相同的话则淘汰最政治右倾的人,每个人都会投和自己的政治倾向差别最大的人,即|a[i]-a[j]|最大,如果有多个则投最政治右倾的人,问最后谁会成为国王。

Solution

双指针,令mid=(a[l]+a[r])/2,则mid以及它左边的人都会投第r个人,它右边的人都会投第l个人,在l和r中淘汰票数最高的,依次进行操作直到最后一个人剩下即可。

void solve()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[i]=a[i];
	}
	sort(b+1,b+1+n);
	int l=1,r=n;
	while(l<r)
	{
		int mid=(b[l]+b[r])>>1;
		int pos=upper_bound(b+1,b+1+n,mid)-b;
		pos--;
		if(pos-l+1>=r-pos)r--;
		else l++;
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i]==b[l])
		{
			cout<<i<<"\n";
			return;
		}
	}
}

H.Merge the squares!

题意:给定1个由n*n个1*1的小正方形组成的正方形,每次可以合并相邻不超过50个正方形变成一个大正方形。问如何通过合

并得到一个大的n*n的大正方形,不限次数

Solution

对于一个正方形,如果他不能被直接合成,那么我们可以把他分成a*a,b*b,a*(a-b),(a-b)*a,对于两个正方形来说,它们最后肯定能变成1块正方形用于与矩形合成,对于两个矩形来说,如果它们最后需要合成的块数之和是小于等于48的,那么就满足条件可以合成,我们先预处理一下使得矩形满足条件的a的长度,然后用递归的方式来写即可。

void init()
{
	for(int i=2;i<=1000;i++)
	{
		for(int j=1;j<i;j++)
		{
			int a=j,b=i-j;
			int cnt=0;
			while(b)
			{
                cnt+=a/b;
                a%=b;
                swap(a,b);
            }
            if(cnt<=24)
            {
                t[i]=j;
                break;
            }
		}
	}
}


void dfs(int x,int y,int a,int b)
{
	if(a==1||b==1)return;
	if(a>b)
	{
		dfs(x,y,b,b);
		dfs(x,y+b,a-b,b);
	}else if(a<b)
	{
		dfs(x,y,a,a);
		dfs(x+a,y,a,b-a);
	}else
	{
		if(a==1)return;
		else if(a>7)
		{
			dfs(x,y,t[a],t[a]);
			dfs(x,y+t[a],a-t[a],t[a]);
			dfs(x+t[a],y,t[a],a-t[a]);
			dfs(x+t[a],y+t[a],a-t[a],a-t[a]);
		}
		ans.push_back({x,y,a});
	}
}

void solve()
{
	init();
	//for(int i=1;i<=1000;i++)cout<<t[i]<<" \n"[i==1000];
	int n;cin>>n;
	dfs(1,1,n,n);
	cout<<ans.size()<<"\n";	
	for(auto it:ans)
	{
		cout<<it.x<<" "<<it.y<<" "<<it.z<<"\n";
	}
}

J.Qu'est-ce Que C'est?

题意:给出一个长度n,问有多少个数组满足以下条件:

1.对于1<=i<=n,-m<=a[i]<=m

2.a的任意一个长度大于2的区间和都大于等于0

Solution

令dp[i+m][0/1]表示最小后缀和为i的合法方案,0/1表示当前或者上一个状态

我们考虑合法转移的条件是最小后缀和加上下一个数大于0,

对于-x来说,他可以由[x,x+1,...,m]转移而来

对于0来说,他可以由[-m,-m+1,...,m]转移而来

对于x来说,他可以由[x-m,x-m+1,...,m]转移而来

考虑到每个数都由一段区间的合法状态转移而来,我们可以通过前缀和处理来优化时间复杂度

void solve()
{
	int n,m;cin>>n>>m;
	int op=0;
	for(int i=-m;i<=m;i++)dp[i+m][0]=1;
	for(int i=-m+1;i<=m;i++)dp[i+m][0]=(dp[i+m-1][0]+dp[i+m][0])%mod;
	op^=1;
	for(int i=2;i<=n;i++)
	{
		for(int j=-m;j<=m;j++)
		{
			if(j<0)dp[j+m][op]=((dp[m+m][op^1]-dp[-j+m-1][op^1])%mod+mod)%mod;
			else {
				dp[j+m][op]=dp[m+m][op^1];
				if(j!=0)dp[j+m][op]=((dp[j+m][op]-dp[j+m-m-1][op^1])%mod+mod)%mod;
			}
			
		}
		for(int j=-m+1;j<=m;j++)
		{
			dp[j+m][op]=(dp[j+m-1][op]+dp[j+m][op])%mod;
			//cout<<dp[j+m][op]<<"\n";
		}
		op^=1;
		for(int j=-m;j<=m;j++)dp[j+m][op]=0;
	}
	cout<<dp[m+m][op^1]<<"\n";
}

L.We are the Lights

题意:有n*m盏灯构成的矩阵,最开始所有灯都是关着的,进行q次操作,每次操作可以 关上/打开 一行/一列 的灯,问进行了q次操作后还有多少灯是开着的

Solution

对于每一行来说

如果它从头到尾都没有进行操作,假设最后有x列灯最后的操作是开灯,则对答案的贡献是x

如果它最后的操作是开灯,假设最后有x列灯最后的操作是关灯,则对答案的贡献是m-x

如果它最后的操作是关灯,假设最后有x列灯最后的操作是开灯,则对答案的贡献是x

将操作存下来然后倒着遍历一遍即可

void solve()
{
	int n,m,q;cin>>n>>m>>q;
	for(int i=1;i<=q;i++)
	{
		cin>>s1[i]>>a[i]>>s2[i];
	}
	int off=0,on=0;
	int ans=0;
	for(int i=q;i>=1;i--)
	{
		if(s1[i]=="column")
		{
			if(c[a[i]]==0)
			{
				if(s2[i]=="on")c[a[i]]=1;
				else c[a[i]]=-1;
			}else continue;
			if(c[a[i]]==1)on++;
			else off++;
		}else
		{
			if(b[a[i]]==0)
			{
				if(s2[i]=="on")b[a[i]]=1;
				else b[a[i]]=-1;
			}else continue;
			if(b[a[i]]==1)ans+=m-off;
			else ans+=on;
		}
		//cout<<off<<"\n";
		//cout<<ans<<"\n";
	}
	for(int i=1;i<=n;i++)
	{
		if(b[i]==0)ans+=on;
	}
	cout<<ans<<"\n";
}

标签:题意,正方形,int,void,多校,dfs,else,牛客,2023
From: https://www.cnblogs.com/HikariFears/p/17593035.html

相关文章

  • 2023 CISCN 第十六届全国大学生信息安全竞赛 初赛 WriteUp
    2023CISCN第十六届全国大学生信息安全竞赛初赛WriteUp引言第十六届全国大学生信息安全竞赛——创新实践能力赛http://www.ciscn.cn/competition/securityCompetition?compet_id=38时光荏苒,又是一年一度的国赛了!这篇writeup是xdlddw战队的队友一起写的,非常感谢队......
  • 牛客多校第三场-D-Ama no Jaku
    D-AmanoJaku_2023牛客暑期多校训练营3做法:2-sat先贴个代码,晚点补上思路#include<bits/stdc++.h>usingnamespacestd;#defineendl"\n"typedeflonglongll;constintN=2e3+5;chara[N][N];std::vector<int>edge[N];//bel数组记录某个点在哪个连通块里面int......
  • 2023北京市属院校录取分数及市排名
    北京共有28所市属高校,其中4所院校不在本科普通批招生:北京警察学院仅在本科提前批普通A段招生;中国音乐学院和北京舞蹈学院仅在本科提前批艺术A段招生;首钢工学院目前仅在专科普通批招生。表格整理了2023年市属院校在本科普通批招生的24所院校。快来看看2023年各院校在京本科普通批招......
  • 【2023-07-30】连岳摘抄
    23:59时间对友谊的磨蚀,好比水流过石子,反而把它洗濯得光洁了。                                                 ——钱锺书有人告诉孔子,我们这里有一个正直的人,发现......
  • DASCTF 2023 & 0X401七月暑期挑战赛——— 解析viphouse
    DASCTF2023&0X401七月暑期挑战赛———解析viphouse保护策略静态分析main  主函数在while循环提供了一个菜单。void__fastcall__noreturnmain(__int64a1,char**a2,char**a3){charnptr[10];//[rsp+Eh][rbp-12h]BYREFunsigned__int64v4;//[rsp......
  • [UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312) - A
    UNIQUEVISIONProgrammingContest2023Summer(AtCoderBeginnerContest312)-AtCoderA-Chord(atcoder.jp)#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;intmain(){vector<string>str{"ACE",&qu......
  • 2023年7月30日 天气:晴
        今天早上起来背了一个小时的英语单词,然后晨跑了三公里,回到家后学习了一个小时的 英语阅读。下午学习编程了一个小时,然后看了一会电视,最后就是写了一个小时的作业,晚上练了一个小时的字,最后看了几章小说。   明天打算看几集电视剧,然后学习一个小时的java,有时间......
  • IJCAI 2023 | 腾讯优图实验室入选论文解读,含小样本学习方法、玻璃物体分割、RSI变化检
    前言 近日,IJCAI2023(InternationalJointConferenceonArtificialIntelligence)国际人工智能联合大会公布了录用结果。本届会议共有4566篇投稿,接收率为15%。作为当前全球最负盛名的AI学术会议之一,IJCAI将于今年8月在澳门举行。本文转载自腾讯优图仅用于学术分享,若侵权请联......
  • 2023.7.30值得推荐的一款服务器空间
    ,已经体验一个月咯,非常不错的免费资源,适合大家去了解了解~!他们家的免费空间,免费服务器,非常稳定,非常靠谱,值得拥有,价格厚道~!免备案服务,域名管理等等服务,应有尽有,2023年你值得了解,他们家的免费云服务器还是独立IP的哦,非常非常好,非常NICE~!官网地址:https://www.sanfengyun.com......
  • NOI 2023 游记
    Day-7坐了10h+高铁后到达成都!Day-6~Day-2赛前集训!还看了两场hdu多校的题,不过贡献几乎为\(0\)。第二场的计算几何题写了一个小时,调了一个小时没过然后下播了。赛后改了一车东西才过。成都的外卖怎么都这么辣!Day-1进校!感觉cdqz的环境和华二昆山的没法比,不过鉴于后者是国......