zoukankan      html  css  js  c++  java
  • 【HDU 5920】 Ugly Problem

    题意

    给你一个数字n(n < 10^1000),将其拆成若干个回文串(不超过50个)输出拆分方案

    分析

    不难想到,我们可以每次给n减一个小于他的最大的回文串,这样能够尽量构造出最少数量的回文串,方法可以使直接将前一半反转贴到后一半,如果比原来的数字大,那么前一半减少1,再反转贴为后一半
    比较坑的地方就是 如果构造出来的是11比n大, 那么前一半-1变成了00 ,特判一下,应该为9;如果构造出来是101比n大,应该特判为99

    这个题没太多好讲的,我想在这里记录一下java编程心得,以后也会更新

    主体框架

    import java.util.*;
    import java.lang.*;
    import java.math.*;
    import java.text.*;
    import java.io.*;
    public class Main
    {
    	public static void main(String[] args)	{
    		try
    		{
    		    Scanner cin = new Scanner(System.in);
                        //文件流
    		    //PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
    	            //Scanner cin = new Scanner(new File("input.txt"));  
    		}catch(Exception e ){
    
    		}
    		
    		
    	}
    }
    

    这里的类名,在提交到oj上时,一定要取为Main,但是本机运行的时候,一定要取为和文件名相同的名字,否则会CE

    输入

    int n = cin.nextInt(); //读入一个整数
    BigInteger n = cin.nextBigInteger(); // 读入一个大整数
    double n = cin.nextDouble(); // 读入一个浮点数
    String n = cin.next(); // 读入一个字符串
    while(n = cin.hasNextInt()){
    ...
    }
    

    这里看起来是很有规律可循的……
    输入输出优化

    输出

    int n = 10;
    System.out.print("n = "+n); //不换行
    System.out.println("n = "+n);//换行
    

    print 会输出
    n = 10
    println 会输出
    n =
    10

    定义数据类型

    单个变量感觉和c++ 差别不大
    int 是基本数据类型 Integer 是int的包装类
    基本数据类型,分为boolean、byte、int、char、long、short、double、float;
    为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型
    比如排序需要自定义排序规则时,只能用包装类型
    定义数组为

    Type [] s = new Type [55];
    

    以及使用BigInteger 方法将字符串转为BigInteger时

    BigInteger n = new BigInteger(s,10);
    

    第一个参数为字符串,第二个参数为相应进制,对这个new,我现在不是太理解

    比较大小

    这里需要明白compareTo 和 == 的区别
    通俗来说 == 是强相等,必须等号两边是同一个对象(可以理解成地址相同)才会返回True
    而a.compareTo(b) 只要a和b数值相等就返回True
    具体的比较方法,如果该数据类型有定义比较规则,就按比较规则来,比如String按字典序,按数值大小
    compareTo的返回值表示比较的结果,如果 a>b 返回正数,a 和b相等 返回 0 ,a<b 返回负数

    字符串String的一些操作

    具体可以查阅 String.
    String不等同于char[] ,它的值在创建后就不能改变
    char[] 转String

    char data[] = {'a', 'b', 'c'};
    String str = new String(data);
    

    取String的下标为i到j的子串

    String subs = s.substring(i,j+1);
    

    取字符串s下标为i的字符

    char c  = s.charAt(i);
    

    比较两个字符串大小

    s1.compareTo(s2);
    

    BigInteger的一些操作

    具体可以查阅 BigInteger
    四则运算

    a = a.add(b); // a+=b;
    a = a.subtract(b); // a-=b
    a = a.multiply(b); // a*=b;
    a = a.divide(b); //a/=b;
    a = a.remainder(b) ; // a%=b;
    

    位运算

    a = a.and(b); // a = a&b;
    a = a.or(b); // a = a|b;
    a = a.xor(b) // a = a^b;
    a = a.shiftLeft(n) // a = (a<<n);
    a = a.shiftRight(n) // a=(a>>n)
    

    BigDecimal的一些操作

    因为我还没用过BigDecimal,直接先扔链接
    BigDecimal

    shell操作

    这里不算是将java知识点,在shell下运行java,标准读入以及文件读入,应该还比较好理解

    javac name.java // 编译
    java name // 运行,标准读入,标准输出
    java name <data.in //运行,文件读入,标准输出
    java name >data.out // 运行,标准读入,文件输出
    java name <data.int >data.out // 运行,文件读入,文件输出
    

    STL (Collections)

    java中也有类似c++STL 的存在,是一个叫做Collections的class,东西太多,不是很熟悉,先丢链接
    Collections
    讲一下排序方法

    • 以自然顺序(从小到大)排序
    nt[] a = new int[15];
    int n = cin.nextInt();
    for(int i = 1;i<=n;i++) a[i] = cin.nextInt();
    Arrays.sort(a,1,n+1); 
    
    • 自定义顺序(从大到小)顺序
    import java.io.*;
    import java.lang.*;	
    import java.util.*;
    import java.math.*;
    import java.text.*;
    public class test
    {
    	public static void main(String[] args)
    	{
    		Scanner cin = new Scanner(System.in);
    		Integer[] a = new Integer[15];
    		int n = cin.nextInt();
    		for(int i = 1;i<=n;i++) a[i] = cin.nextInt();
    		Comparator <Integer> c = new Mycomparator();   // 实例化一个Comparator对象 
    		Arrays.sort(a,1,n+1,c);
    		for(int i = 1;i<=n;i++) System.out.print(a[i]+" ");
    		System.out.println();
    	}
    }
    class Mycomparator implements Comparator <Integer>  
    {  
            public int compare(Integer x, Integer y)
            {  
              
                if(x > y) return -1;  
                if(x < y) return 1;  
                return 0;  
            }  
    }
    

    AC代码

    import java.util.Scanner;
    import java.math.*;
    import java.text.*;
    public class Main
    {
    	public static void main(String[] args)
    	{
    		Scanner cin = new Scanner(System.in);
    		int T = cin.nextInt();
    		String [] s = new String [55];
    		for(int Case=1;Case<=T;Case++)
    		{
    			BigInteger n = cin.nextBigInteger();
    			int ans = 0;
    			while(ans < 50 && n.compareTo(BigInteger.valueOf(0))>0 )
    			{
    				String t = n.toString();
    				int lenth = t.length();
    				if(lenth == 1){
    					ans+=1;s[ans] = t;
    					break;
    				}
    					String t1 = "";
    					String t2 = "";
    					int mid = lenth/2-1;
    					for(int i = 0;i<=mid;i++)
    						t2 += t.charAt(i);
    					t1 = t2;
    					if(lenth %2!=0) t1 += t.charAt(lenth/2);
    					for(int i = mid;i>=0;i--)
    						t1+=t2.charAt(i);
    					BigInteger m = new BigInteger(t1,10);
    					if(n.compareTo(m)<0)
    					{
    						if(t1.compareTo("11") == 0)	t1 = "9";
    						else if(t1.compareTo("101") == 0) t1 = "99";
    						else{
    							m = new BigInteger(t2,10);
    							m = m.subtract(BigInteger.ONE);
    							if(m.compareTo(BigInteger.ZERO) == 0){
    								t1 = "";
    								t1 += t.charAt(lenth/2);
    							}
    							else{
    								t2 = "";
    								t2+=m.toString();
    								mid = t2.length()-1; 
    								t1 = t2;
    								if(lenth%2 != 0)
    								t1 += t.charAt(lenth/2);
    								for(int i = mid;i>=0;i--)	t1+=t2.charAt(i);
    							}
    						}
    					}
    				//
    				ans+=1;
    				s[ans] = t1;
    				m = new BigInteger(t1,10);
    				n = n.subtract(m);
    			}
    			System.out.println("Case #"+Case+":");
    					System.out.println(ans);
    					for(int i = 1;i<=ans;i++) System.out.println(s[i]);
    		}
    	}
    }
    
  • 相关阅读:
    在你设计中可能用到的20个杂志 PSD 原型
    Gradify
    CamanJS – 提供各种图片处理的 JavaScript 库
    免费素材:包含 250+ 组件的 DO UI Kit
    24个很赞的 Node.js 免费教程和在线指南
    Dynamics.js
    Page Scroll Effects
    Slides
    15款加速 Web 开发的 JavaScript 框架
    Wee – 为现代 Web 开发打造的 CSS 脚手架
  • 原文地址:https://www.cnblogs.com/greenty1208/p/9127498.html
Copyright © 2011-2022 走看看