• 定价 题解


    思路

    其实就是一道水题。
    只要打出了T 20pts的代码,那么你离AC就相差无几了。
    其实可以发现如果你在算了100之后并不需要去算101~999。
    那么可以直接人口普查,跑一遍,每次在循环(i++)时改成(i+=add)即可。
    至于(add)就是一眼的事情了。

    代码

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int Add[15] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
    
    int t, l, r;
    
    int change(int num) {
    	while (num % 10 == 0) {
    		num /= 10;
    	} 
    	int power = 1;
    	int len = 0;
    	for (int i = 1; i <= 9; i++) {
    		power *= 10;
    		if (power >= num) {
    			len = i;
    			break;
    		}
    	}
    	int last = num % 10;
    	if (last == 5) {
    		return len * 2 - 1;
    	} else return len * 2;
    }
    
    int add(int x) {
    	int tot = 0;
    	while (x % 10 == 0) {
    		x /= 10;
    		tot++;
    	}
    	return tot;
    }
    
    int main() {
    	scanf ("%d", &t);
    	while (t--) {
    		scanf ("%d %d", &l, &r);
    		int ans = 50;
    		int num;
    		for (int i = l; i <= r; i += Add[add(i)]) {
    			if (change(i) < ans) {
    				ans = change(i);
    				num = i;
    			}
    		}
    		printf ("%d
    ", num);
    	}
    	return 0;
    }
    
  • 相关阅读:
    python操作redis
    Redis 安装试用
    python操作RabbitMQ
    pycharm快捷键
    各种python使用的坑
    RabbitMQ安装和使用
    Moosefs基本概念
    mesos客户端重新注册导致容器状态为staged
    初学Android 二 创建项目以及目录结构
    【杭电】[5631]Rikka with Graph
  • 原文地址:https://www.cnblogs.com/cqbz-ChenJiage/p/14082423.html
Copyright © 2020-2023  润新知