当前位置: 代码迷 >> 综合 >> CodeForces - 219B - Special Offer! Super Price 999 Bourles!
  详细解决方案

CodeForces - 219B - Special Offer! Super Price 999 Bourles!

热度:20   发布时间:2024-01-12 15:23:48.0

题目链接:http://codeforces.com/problemset/problem/219/B

题意:给出商品价格p,希望通过降价使得价格p的后面的数位有尽可能多的9,并且要保证降价范围不超过d

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
typedef long long ll;
#define M 100005
ll p,d;
int main()
{cin>>p>>d;ll pre=p,las=0; //las枚举后面9的个数,pre是通过降价将尾数变为las之后,前面非9位数的值ll pow=10,ans=p;//pow记录pre的权值while(pre>0){ll x=pre%10;//x是pre的当前位pre=pre/10;las=las*10+9;if(x!=9)    //当前位非9,那么我们要将前面pre的值--来保证是降价的过程,{if(pre>=1)//如果除了las,前面pre的值非0{pre--;     //降价ll tmp=pre*pow+las;//降价后的值ll cha=p-tmp;      //所降价格if(cha<=d) ans=tmp;else break;}}else{     //当前位为9,不用继续降价,只要合成当前枚举的价格即可ll tmp=pre*pow+las;ll cha=p-tmp;if(cha<=d) ans=tmp;else break;}pow=pow*10;}cout<<ans<<endl;return 0;
}


  相关解决方案