专栏文章

题解:P14605 [NWRRC 2025] Faulty Fraction

P14605题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mimxx4ac
此快照首次捕获于
2025/12/01 17:22
3 个月前
此快照最后确认于
2025/12/01 17:22
3 个月前
查看原文

分析

s(x)s(x) 代表 xx 的长度。例如 s(4341)=4s(4341)=4
证明过程
众所周知,s(x×y)s(x \times y) 只有以下两种情况:
  1. 进位,则结果为 s(x)+s(y)s(x)+s(y)
  2. 不进位,则结果为 s(x)+s(y)1s(x)+s(y)-1
把以上结论迁移到题目中,得到 s(s)=s(a)+s(b)s(s)=s(a)+s(b)
由除法是乘法的逆运算可得 c×b=ac \times b=a
根据长度的性质反推可得 s(a)=s(b×c)s(a)=s(b \times c) 要么是 s(b)+s(c)s(b)+s(c),要么是 s(b)+s(c)1s(b)+s(c)-1
我们设 s(s)=xs(s)=xs(c)=ys(c)=y 以及 s(b)=zs(b)=z。可得 s(a)=xzs(a)=x-z。进而得 xzx-z 要么是 y+zy+z,要么是 y+z1y+z-1。由于 zz 为整数,故 z=xy12z= \lfloor\frac{x - y - 1}{2}\rfloor

代码

代码CPP
#include<bits/stdc++.h>
using namespace std;
string s,c;
int main()
{
	cin>>s>>c;
	int x=s.size();
    int y=c.size();
    int z=(x-y+1)/2;
	cout<<s.substr(0,x-z)<<" "<<s.substr(x-z);
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...