AtCoder Beginner Contest 285

A - Edge Checker 2

原题链接

题意

在下图中确定是否存在直接连接编号点 \(a\)\(b\) 的线段。

分析

这是一个二叉树,不难发现,当且仅当 \(b\)\(a\times 2\)\(a\times 2+1\) 时,有直接连接 \(a\)\(b\) 的线段。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	if(b==a*2||b==a*2+1) cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
        return 0;
}

B - Longest Uncommon Prefix

原题链接

题意

给你长度为 \(N\) 的一个由小写英文字母组成字符串 \(S\)\(S\) 的第 \(x(1\le x\le N)\) 个字符是 \(S_x\)

对于每个 \(i=1,2,\ldots,N−1\),找到最大非负整数 \(l\) 满足以下所有条件:

  • \(l+i\le N\)
  • 对于所有整数 \(k(1\le k \le l)\) 使得 \(S_k\ne S_{k+i}\)

请注意 \(l=0\) 总是满足条件。

分析

这道题没什么巧方法,就是暴力,依题意模拟。

  • 对于每个 \(i\),我们就从 \(N-i\) 一直枚举到 \(0\),用 \(j\) 表示,
  • 对于每个 \(j\) ,我们再从 \(1\)\(j\) 枚举 \(k\),如果符合条件,就退出循环,此时的 \(j\) 就是最终结果 \(l\)

代码

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main()
{
	cin>>n>>s;
	for(int i=0;i<s.size()-1;i++)
	{
		int ii=i+1;
		int l;
		for(int j=n-ii;j>=0;j--)
		{
			bool flag=0;
			for(int k=1;k<=j;k++)
			{
				if(s[k-1]==s[k+ii-1])
				{
					flag=1;
					break;
				}
			}
			if(flag==0)
			{
				l=j;
				break;
			}
		}
		printf("%d\n",l);
	}
        return 0;
}

C - abc285_brutmhyhiizp

原题链接

题意

有一个序列是按AB\(\ldots\)AAAB\(\ldots\)AAA\(\ldots\) 的顺序排列。

给出一个字符串,求它是第几项。

保证结果小于 \(10^{16}\)

分析

找一下规律。

  • A\(1\times1\)
  • B\(2\times1\)
  • AA\(1\times 1+1\times 26\)
  • AB\(2\times 1+1\times 26\)
  • AAA\(1\times 1+1\times 26+1\times 26^2\)

找到规律了吗?

从最后一位倒着开始看,发现 \(ans\) 每次加上(s[i]-'A'+1)*(long long)pow(26,ii);

注意:

  • 这里的 \(ii\)s.size()-1-i,表示是倒着数的第几项再减一。
  • pow要强制转换为long long类型。

代码

#include<bits/stdc++.h>
using namespace std;
string s;
long long ans=0,ii;
int main()
{
	cin>>s;
	for(int i=s.size()-1;i>=0;i--)
	{
		ii=s.size()-i-1;
		ans=ans+(s[i]-'A'+1)*(long long)pow(26,ii);
	}
	cout<<ans<<endl;
        return 0;
}

感谢您的阅读,您的点赞与评论是我创作最大的动力。

luogu:PineappleSummer

csdn:PineappleSummer

cnblogs:PineappleSummer

可以关注我吗qwq

posted @ 2023-01-16 11:07  PineappleSummer  阅读(56)  评论(2编辑  收藏  举报