poj 1750 java

这道题很坑爹,稍微不注意不是PE就是RA要么TLE。

先说下题意:

题干描述的不是很清晰,主要是通过题目给的例子自己总结的,(这个很关键,没找着好的规律永远会TLE):

规律:后面一个字符串和前面一个字符串比较,如果前几位相同的字符数量大于空格的数量,那么空格的数量加1,如果前几位相同字符数量小于空格的数量,那么空格数量变为相同字符的数量。

  网上用java实现的代码基本没找着,没办法,之前poj上一共就4位前辈用java Ac的,只能自己动手了,

开始我直接暴力比较直接打印,最后把RA解决了,但是很遗憾TLE了,

这道题用C,C++都要500Ms+,用java还是有点难度的,

我优化了半天,费尽了脑汁,终于AC了:

下面代码与懒人共享:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static StringBuffer[]b=new StringBuffer[11];
    public static int blank;
    public static void main(String[]args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str="" ;
        String next;
        blank=0;
        init();
        while((next = in.readLine())!=null){
            Write(str,next);
            str = next;
        }
    }
    public static void Write(String str,String next){
        int same = gsn(str,next);
        if(same>blank){
            blank++;
        }else if(same<blank){
            blank=same;
        }
        System.out.println(b[blank]+next);
    }
    public static int gsn(String s1,String s2){//getSameNumber
        int len = s1.length()>s2.length()?s2.length():s1.length();
        int i;
        for(i=0;i<len;i++){
            if(s1.charAt(i)!=s2.charAt(i)){
                break;
            }
        }
        return i;
    }

    public static void init(){
        StringBuffer sb ;
        for(int i=0;i<11;i++){
            sb = new StringBuffer("");
            for(int j=0;j<i;j++){
                sb.append(" ");
            }
            b[i]=sb;
        }
    }
}

补充一下,那个空格的打印很浪费时间,java中貌似没有直接打印几个空格的方法,如果每次都用for实现,那么肯定TLE, 由于字符串长度不大于10,所以我用了打表,这个能节约不少时间。

时间: 2024-12-29 11:19:44

poj 1750 java的相关文章

POJ题目Java代码(一)

POJ 1001 Exponentiation import java.math.BigDecimal; import java.util.Scanner; public class Poj1001 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ BigDecimal bigDecimal = new BigDecimal(sc.next())

POJ 1750 Dictionary(模拟)

题目链接:http://poj.org/problem?id=1750 Description Authors of the new, all-in-one encyclopedia have organized the titles in the order they consider most appropriate for their readers. It's not always alphabetical, because they want to observe some pecul

poj 3157 Java vs C++ 模拟

题意: 将java和c++中的变量名相互转换,比如:long_and_mnemonic_identifier装换为longAndMnemonicIdentifier. 思路: 直接模拟遍历替换,陷阱很多.. 代码: //poj 3157 //sep9 #include <iostream> using namespace std; char s[256],ans[256]; void deal() { int i,j; int style1=0,style2=0; for(i=0;s[i]!=

poj 1001 java大精度

import java.io.* ; import java.math.* ; import java.util.* ; import java.text.* ; public class Main { public static void main(String[] args) { Scanner cin=new Scanner (System.in) ; BigDecimal A; int B ; while(cin.hasNext()){ A=cin.nextBigDecimal() ;

POJ 2386 java实现

描述: Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John wou

poj 3440 java 吐槽

非常蛋疼的一道题,题目本身很简单,但是最后的输出结果太让人恶心了, 其中有三点需要注意的: 1.title单复数问题 2.title单复数后的空格数不一样 3.Case之间要有空行,但是最后个Case后不能有空行,这点太恶心了,开始一直没找着...直接循环输出回车,一直报错PE, 最后是代码:方便伸手党: import java.text.DecimalFormat; import java.util.Scanner; public class Main{ public static void

POJ 1328 Java实现

本题借鉴了别人的做题思想,主要如下/** *对要扫描到的每个岛求出雷达可以安置在海岸上的区间[left,right],  *对这些区间按left从小到大排序  *从第一个区间的right点开始安置雷达,然后依次检索下一个区间,  *若下一个区间完全在刚刚安置雷达的区间内(new.left>=pre.left &&  * new.right<=pre.right ),则将刚刚安置的雷达重新安置在这个区间(new)的右端:  *若下一个区间的左端点在刚刚安置雷达的区间内,而右端点在

POJ 1750 Dictionary

[题意简述]:我想根据输入输出,就差不多能搞懂题意了,我就不再描述 [分析]:最不喜欢字符串的问题,唉,见代码吧,处理的方法都在代码中.注意此题一直都是相邻的两个字符串相比就对了,抓住这一点,就可以很简单的解决. 详见代码: //196K 1000Ms #include<iostream> #include<cstdio> #include<cstring> using namespace std; char str1[100],str2[100]; int main(

poj 3404&amp;&amp;poj1700(贪心)

Bridge over a rough river Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4143   Accepted: 1703 Description A group of N travelers (1 ≤ N ≤ 50) has approached an old and shabby bridge and wishes to cross the river as soon as possible. Ho