51nod 1385 凑数字(贪心+构造)

分析:写几个就会发现,最优的做法应该是先写1234567890,然后如果不够用,往后面依次加1、2、3……然后就可以过了,这样保证每个数字尽可能多得被用到,题解是另一种构造,原理一样,严格证明看题解。。

题解:

 

 

 1 import java.io.*;
 2 import java.util.*;
 3 import java.math.BigInteger;
 4 public class Main {
 5     public static void main(String[] args){
 6         Scanner cin=new Scanner(System.in);
 7         String s;
 8         s=cin.next();
 9         BigInteger n=new BigInteger(s);
10         int len=n.toString().length();
11         BigInteger ans=new BigInteger("0");
12         ans=BigInteger.valueOf(10*(len-1));
13         for(int i=1;i<10;i++){
14             if(i<s.charAt(0)-'0')
15                 ans=ans.add(BigInteger.ONE);
16             if(i==s.charAt(0)-'0'){
17                 for(int j=0;j<len;j++){
18                     if(s.charAt(j)-'0'>i||(j==len-1&&s.charAt(j)-'0'==i)){
19                         ans=ans.add(BigInteger.ONE);break;
20                     }
21                     if(s.charAt(j)-'0'<i){
22                         break;
23                     }
24                 }
25                 break;
26             }
27         }
28         System.out.println(ans);
29         cin.close();
30     }
31 }

 

posted @ 2017-07-20 12:32  7391_KID  阅读(224)  评论(0编辑  收藏  举报