NC20016. [HEOI2015]定价
描述
输入描述
输入文件的第一行包含一个正整数 T,表示测试数据的数目。
每个测试数据占单独的一行,包含两个空格分隔的正整数 L, R,表示定价的区间。
输出描述
对于每个测试数据,在单独的一行内输出结果。如果荒谬度最低的价格不唯一,输出最小的那个。
示例1
输入:
3 998 1002 998 2002 4000 6000
输出:
1000 1000 5000
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 492K, 提交时间: 2020-03-28 23:17:29
#include<bits/stdc++.h> using namespace std; int cal(long long x) { int tmp=0; while(x%10==0) x/=10; if(x%10==5) tmp--; while(x) x/=10,tmp+=2; return tmp; } int main() { int t; scanf("%d",&t); while(t--) { long long l,r; scanf("%lld%lld",&l,&r); long long ans1=l,ans2=cal(l); for(int i=1;i<=r;i*=10) { int tmp; tmp=l/(i*10)*(i*10); while(tmp<l) tmp+=i*10; if(tmp<=r&&cal(tmp)<ans2) ans1=tmp,ans2=cal(tmp); tmp=l/(i*10)*(i*10)+5*i; while(tmp<l) tmp+=i*10; if(tmp<=r&&cal(tmp)<ans2) ans1=tmp,ans2=cal(tmp); } printf("%d\n",ans1); } return 0; }