P9203 时效「月岩笠的诅咒」 题解

发布时间 2023-04-09 23:11:44作者: Ggsddu_zzy

题目传送门

题目大意

判断每次经过以下操作其一后,\(a\)\(b\) 是否相等:

  • \(a\) 加上 \(1\),即 \(a\gets a+1\)
  • \(b\) 加上 \(1\),即 \(b\gets b+1\)

解题思路

\(a\)\(b\) 都是每次加 \(1\),所以如果它们相等,那它们的小数部分应该是相等的,所以问题就变成了判断 \(a\)\(b\) 的小数部分是否相等

找出 \(a\)\(b\) 的小数部分是从哪开始的,也就是 \(a\)\(b\) 的小数点的后面的一位。

在小数部分的范围内枚举每一位,并相比较,如果相同,记录相同的个数。

因为输入保留到小数点后 \(12\) 位,所以当相同的个数等于 \(12\) 时,就满足「周年」。

代码

AC 记录

#include<bits/stdc++.h>
#define ri register int
using namespace std;
string n,m;
int a,b,sum=0;
int main() {
	cin>>n>>m;
	for(ri i=1;i<=n.size();i++)if(n[i-1]=='.')a=i;
	for(ri i=1;i<=m.size();i++)if(m[i-1]=='.')b=i;
	while(a<=n.size()-1&&b<=m.size()-1){
		if(n[a++]==m[b++])sum++;
	}	
	if(sum==12)cout<<"YES";
	else cout<<"NO";
	return 0;
}