题目大意
判断每次经过以下操作其一后,\(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\) 时,就满足「周年」。
代码
#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;
}
标签:相等,int,题解,月岩,P9203,gets,ri,小数
From: https://www.cnblogs.com/zzyblog0619/p/17301403.html