用户工具

站点工具


2020-2021:teams:manespace:codeforces_educational_round_87_div2

这是本文档旧的修订版!


codeforces educational round 87(div2)

A

题意:大 模 拟

题解:题目比较长,理清逻辑关系即可,没什么好说的……

点击以显示 ⇲

点击以隐藏 ⇱

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int t,a,b,c,d;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d%d",&a,&b,&c,&d);
		if(b>=a) 
		{
			printf("%d\n",b);
			continue;
		}
		else
		{
			int res=a-b;
			if(d>=c)
			{
				printf("-1\n");
				continue;
			}
			else
			{
				int t=ceil((double)res/(c-d));
				printf("%lld\n",1ll*t*c+1ll*b);
			}
		}
	}
 } 

B

题意:给定一个只由1 2 3组成的字符串,问取该字符串的一段连续字串,至少要取多长的字串才能满足子串中既有1也有2还有3。

题解:首先判断是否三个数都出现了,若没有都出现,直接就可以判定不成立。然后,最不动脑经的做法,就是从第一个开始模拟,找出每一段连续的且同为一个字符的串,观察该串开头的左边和末尾的右边的字符是否为同一个,若不是则为一种情况。复杂度O(n)

点击以显示 ⇲

点击以隐藏 ⇱

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+13;
char s[maxn];
int flag[4];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		for(int i=1;i<=3;i++) flag[i]=0;
		int ans=0x7fffffff;
		int yes=1;
		scanf("%s",s+1);
		int len=strlen(s+1);
		for(int i=1;s[i];i++)
		{
			flag[s[i]-'0']=1;
		}
		for(int i=1;i<=3;i++)
		{
			if(!flag[i]) yes=0;
		}
		if(!yes) {
		printf("0\n");continue;}
		int k=1,st;
	    while(s[k]==s[1]) k++;
	    st=k-1;
		for(int i=k;i<=len;i++)
		{
			int j=i;
			while(s[j]==s[i]) j++;
			if(j>len) {
			break;}
			if(s[j]!=s[st]) ans=min(ans,j-i+2);
			st=j-1;
			i=st;
		}
		printf("%d\n",ans);
	 } 
 } 

C1

题意:给一个边长全部都为1的正2*n边形,这里n取偶数,要求一个正方形完全盖住这个正2*n边形,问最小边长是什么。

2020-2021/teams/manespace/codeforces_educational_round_87_div2.1590316399.txt.gz · 最后更改: 2020/05/24 18:33 由 iuiou