题解:P14605 [NWRRC 2025] Faulty Fraction

· · 题解

题目传送门

1. 思路

直接用高精度除法来暴力是不行的,因为 \mathcal{O}(n^2) 的速度会快到飞起来

所以我们就要用聪明一点的方法。

a 为被除数,b 为除数,c 为商,\mid x \mid 表示 x 的长度。

所以 b \times c=a(小学生都知道吧?)

那么如何让 b \times c=a 呢?

不难发现,让 \mid b \mid + \mid c \mid \ = \ \mid a \mid 就行啦。

2. 实现

因为 \mid a \mid + \mid b \mid + \mid c \mid \ = \ 题目中的 \mid s \mid + \mid c \mid,所以 \mid a \mid \ = \ 题目中的 \frac{\mid s \mid + \mid c \mid}{2}

那么,上代码:

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll N=1e5+10;
string a,b;//存储输入
int la,lb;//a,b字符串的长度
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);//输入输出加速
    cin>>a>>b;
    la=a.size(),lb=b.size();//获取长度
    for(int i=0;i<la+lb>>1;i++)
        cout<<a[i];//输出被除数
    cout<<' ';
    for(int i=la+lb>>1;i<a.size();i++)
        cout<<a[i];//输出除数
    return 0;//完结撒花
}