1 条题解

  • 0
    @ 2025-8-24 22:47:56

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Lemon_zqp
    致敬BYGF的传奇CYS || 愤怒带来冲动,伤感使人犹豫

    搬运于2025-08-24 22:47:56,当前版本为作者最后更新于2023-06-03 22:41:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路

    这道题的思路就是暴力模拟,如果 yy 的位数大于 zz 那么把 yy 补足 1212 位输出即可,否则算出 zzyy 多出的那几位数,然后把这个数减一、者加一、不变得出三个数,放到 yy 的前面,减去 zz,然后取最小值例如 zz123456123456123456123456yy987654987654,那么 zzyy 多的部分就是 123456123456,分三种情况让这个数插到 yy 前面,减一或者加一或着不变,那么就产生三个数 123455987654123455987654123457987654123457987654123456987654123456987654,接着把他们都补足 1212 位,然后依次减去 zz 取最小值即可,记得取绝对值,最后答案为 135802135802,转换成代码也是非常简单。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int wei(long long a)//取a的位数
    {
    	int cnt = 0;
    	while(a > 0)
    	{
    		cnt++;
    		a /= 10;
    	}
    	return cnt;
    } 
    long long qq(long long a, int t)//在a中取前t位
    {
    	int as = wei(a) - t;
    	for(int i = 1; i <= as; i++)
    	{
    		a = a / 10;
    	}
    	return a;
    }
    long long qh(long long a, int t)//在a中取后t位
    {
    	int mo = 1;
    	for(int i = 1; i <= t; i++)
    	{
    		mo *= 10;
    	}
    	return a % mo;
    }
    long long zero_num(int t)//范围10的t次方
    {
    	int mo = 1;
    	for(int i = 1; i <= t; i++)
    	{
    		mo *= 10;
    	}
    	return mo;
    }
    int main()
    {
    	long long y, z;
    	cin >> y >> z;
    	y = abs(y);
    	z = abs(z);
    	int wy = wei(y), wz = wei(z), wc = wz - wy;
    	if(wy > wz)
    	{
    		cout << (100000000000 + y) - z;
    		return 0;
    	}
    	long long s = qq(z, wc), x1, x2, x3;
    	x1 = abs((s * zero_num(wy)) + y);
    	x2 = abs(((s - 1) * zero_num(wy)) + y);
    	x3 = abs(((s + 1) * zero_num(wy)) + y);
    	
    	if(wei(x1) < 12)
    	{
    		x1 = abs((100000000000 + y) - z);//补足12位
    	}
    	else
    	{
    		x1 = abs(x1 - z);
    	}
    	if(wei(x2) < 12)
    	{
    		x2 = abs((100000000000 + y) - z);//补足12位
    	}
    	else
    	{
    		x2 = abs(x2 - z);
    	}
    	if(wei(x3) < 12)
    	{
    		x3 = abs((100000000000 + y) - z);//补足12位
    	}
    	else
    	{
    		x3 = abs(x3 - z);
    	}
        if(x1 > x2)
    	{
    		swap(x1, x2);
    	}
        if(x2 > x3)
    	{
    		swap(x2, x3);
    	}
        if(x1 > x2)
    	{
    		swap(x1, x2);
    	}
    	cout << x1;
    	return 0;
    }
    
    • 1

    信息

    ID
    8546
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者