Codeforces Round #657 (Div. 2)A与B

这场真的是自闭场,第一题卡了一小时,第二题也wa了两发,差点爆零。。。直到最后(其实是现在)都不知道第一题wa点在哪。

Codeforces Round #657 (Div. 2)A与B_第1张图片

Codeforces Round #657 (Div. 2)A与B_第2张图片

Codeforces Round #657 (Div. 2)A与B_第3张图片

题意:

给你一个字符串,中间有一些问号,你可以随意把这些问号换成小写字母。问最后形成的字符串能不能让abacaba变成它的子串且仅出现一次。

分析:

其实重点就是只出现一次。我觉得要是不考虑只出现一次倒真的像一道a题。。。

由于样本比较小,我们可以直接暴力。对每个位置开始做一次分析,将待分析的这七个字母尽量往abacaba上靠(即把问号都换成对应的字母)。其他问号全部换成d。然后判断这个字符串是不是只有一次abacaba。当有一次的时候,输出即可。直到最后都没有的话,输出no。

代码:

#include 
using namespace std;
char a[105];
int ans;
char b[25]="abacaba";
char ji[105];
int n;
bool jisuan(int t)
{
	int tmp=0;
	int j=0;
	for (int i=t;i

B题是我这次比赛唯一做出来的题目(差点爆零可还行)

Codeforces Round #657 (Div. 2)A与B_第4张图片

Codeforces Round #657 (Div. 2)A与B_第5张图片

题意:制定规则:

b*a+b-c=m。

其中abc均是l到r闭区间内的。

现在只知道lrm,求一组满足条件的abc。l,r在1到500000闭区间,m在1e10.

解法:

我们可以得知a*n在[m-(r-l),m+(r-l)]闭区间上。然后a取值在l到r,就可以循环暴力搜索,然后算一下tmp1=(m-(r-l))/i和tmp2=(m+(r-l))/i.tmp3=(m-(r-l))%i.如果(tmp2>tmp1||tmp3==0)&&tmp2>0,则可以直接让a=i;然后n=tmp2。接着就可以计算出bc=b-c=m-a*n.当bc时,b=l,c=l-bc。否则c=l,b=l+bc

代码:

#include 
using namespace std;
typedef long long ll;
ll a,b,c,l,r,m;
void jjwt()
{
	scanf("%lld%lld%lld",&l,&r,&m);
	for (ll i=l;i<=r;i++)
	{
		ll n;
		ll zhi;
		ll bc;
		ll tmp1,tmp2,tmp3,tmp4;
		tmp1=(m-(r-l))/i;
		tmp2=(m+(r-l))/i;
		tmp3=(m-(r-l))%i;
		tmp4=(m+(r-l))%i;
		if ((tmp2>tmp1&&tmp2>0)||(tmp3==0&&tmp2>0))
		{
			n=tmp2;
			a=i;
			zhi=a*n;
			bc=m-zhi;
			if (bc<0)
			{
				b=l;
				c=l-bc;
			}
			else
			{
				c=l;
				b=bc+l;
			}
			printf("%lld %lld %lld\n",a,b,c);
			return;
		}
	}
}
int main()
{
	int T;
	scanf("%d",&T);
	while (T--)
	{
		jjwt();
	}
}

今天这场打的不是很好。

不过毕竟小号,估计能到1000分左右吧,不知道啥时候能正儿八经上个蓝啊。

毕竟还要看论文学信号,一天先做一道题吧。下场打完就可以先休息一阵了。

你可能感兴趣的:(算法训练,codeforces)