zoukankan      html  css  js  c++  java
  • java写入加速

    Java刷题的遇到输入106数据的题目用Scanner直接凉凉,在牛客上看到某位大佬的加速外挂,记录一下模板代码。

    package my_acm;
    
    import java.io.*;
    import java.util.StringTokenizer;
    import java.math.BigInteger;
    
    public class Main {
        public static void main(String[] args) {
            InputStream inputStream = System.in;//InputStream是表示字节输入流的所有类的超类
            OutputStream outputStream = System.out;
            //InputStream与System 没有关系.System.in是System 这个类的静态变量,只是in是InputStream类型的
            
            InputReader sc = new InputReader(inputStream);
            PrintWriter out = new PrintWriter(outputStream);
    
            
            Task solver = new Task();
            solver.solve(sc, out);//这里当作原来的Main函数,输入输出都在里面解决
            
            out.close();//关闭输出流
        }
     
        static class Task {    
            
            public void solve(InputReader scan, PrintWriter out) {
                double ans=0;
                int t=scan.nextInt();
                while(t!=0) {
                    t--;
                    /*
                     * t组数据输入内容
                     */
                }
                
                while(scan.hasNext()) {
                    /*
                     * 多组数据输入内容
                     */
                }
                
                out.println(ans);//输出答案
                 
            }
     
        }
     
        
       //自己写出Scanner原本的输入语法,封装在InputReader类里
        static class InputReader {
            public BufferedReader reader;
            public StringTokenizer tokenizer;
     
            public InputReader(InputStream stream) {
                reader = new BufferedReader(new InputStreamReader(stream), 32768);
                //32768是输入缓冲区大小,随便设的
                tokenizer = null;
            }
     
            public String next() {
                while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                    try {
                        tokenizer = new StringTokenizer(reader.readLine());
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
     
            
            
            
            public int nextInt() {
                return Integer.parseInt(next());
            }
     
            public long nextLong() {
                return Long.parseLong(next());
            }
            
            public double nextDouble() {
                return Double.parseDouble(next());
            }
    
            public boolean hasNext() {
                try {
                    String string = reader.readLine();
                    if (string == null) {
                        return false;
                    }
                    tokenizer = new StringTokenizer(string);
                    return tokenizer.hasMoreTokens();
                } catch (IOException e) {
                    return false;
                }
            }
            
            public BigInteger nextBigInteger() {//大数
                return new BigInteger(next());
            }
     
        }
    }
    读写挂模板

    https://ac.nowcoder.com/acm/contest/3570/L

    思路:矩阵前缀和+二分

    import java.io.*;
    import java.util.StringTokenizer;
    import java.math.BigInteger;
    
    public class Main {
        public static void main(String[] args) {
            InputStream inputStream = System.in;//InputStream是表示字节输入流的所有类的超类
            OutputStream outputStream = System.out;
            //InputStream与System 没有关系.System.in是System 这个类的静态变量,只是in是InputStream类型的
            
            InputReader sc = new InputReader(inputStream);
            PrintWriter out = new PrintWriter(outputStream);
    
            
            Task solver = new Task();
            solver.solve(sc, out);
            
            out.close();
        }
     
        static class Task {    
            public boolean check(long[][] dp,int m,long max,int n) {
                for(int i=1;n-i+1>=m;i++) {
                    for(int j=1;n-j+1>=m;j++) {
                        if(dp[i+m-1][j+m-1]-dp[i+m-1][j-1]-dp[i-1][j+m-1]+dp[i-1][j-1]>=max)
                            return true;
                    }
                }
                return false;
            }
             
            public void solve(InputReader sc, PrintWriter out) {
                int n=sc.nextInt();
                long k=sc.nextLong();
                
                long[][] dp=new long[n+1][n+1];
                long[][] v=new long[n+1][n+1];
                 
                for(int i=1;i<=n;i++) {
                    for(int j=1;j<=n;j++)
                        v[i][j]=sc.nextLong();
                }
                for(int i=1;i<=n;i++)//矩阵前缀和
                    for(int j=1;j<=n;j++)
                        dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+v[i][j];
                int ans=-1;
                int l=1;
                int r=n;
                while(l<=r) {//二分
                    int mid=(l+r)/2;
                    if(check(dp,mid,k,n)) {
                        ans=mid;
                        r=mid-1;
                    }
                    else
                        l=mid+1;
                }
                if(ans==-1) {
                    out.println("I'm a Gold Chef!");
                    return ;
                }
                out.println(ans);
                 
            }
     
        }
     
        
       //自己写出Scanner原本的输入语法,封装在InputReader类里
        static class InputReader {
            public BufferedReader reader;
            public StringTokenizer tokenizer;
     
            public InputReader(InputStream stream) {
                reader = new BufferedReader(new InputStreamReader(stream), 32768);
                tokenizer = null;
            }
     
            public String next() {
                while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                    try {
                        tokenizer = new StringTokenizer(reader.readLine());
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
     
            
            
            
            public int nextInt() {
                return Integer.parseInt(next());
            }
     
            public long nextLong() {
                return Long.parseLong(next());
            }
            
            public double nextDouble() {
                return Double.parseDouble(next());
            }
    
            public boolean hasNext() {
                try {
                    String string = reader.readLine();
                    if (string == null) {
                        return false;
                    }
                    tokenizer = new StringTokenizer(string);
                    return tokenizer.hasMoreTokens();
                } catch (IOException e) {
                    return false;
                }
            }
            
             
            public BigInteger nextBigInteger() {
                return new BigInteger(next());
            }
     
        }
    }
    
    L
    View Code

    https://ac.nowcoder.com/acm/contest/3402/L

    思路:贪心

    package my_acm;
    
    import java.io.*;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    import java.math.BigInteger;
    
    public class Main {
        public static void main(String[] args) {
            InputStream inputStream = System.in;//InputStream是表示字节输入流的所有类的超类
            OutputStream outputStream = System.out;
            //InputStream与System 没有关系.System.in是System 这个类的静态变量,只是in是InputStream类型的
            
            InputReader scan = new InputReader(inputStream);
            PrintWriter out = new PrintWriter(outputStream);
    
            
            Task solver = new Task();
            solver.solve(scan, out);//这里当作原来的Main函数,输入输出都在里面解决
            
            out.close();//关闭输出流
        }
     
        static class Task {    
            
            public void solve(InputReader scan, PrintWriter out) {
                while(scan.hasNext()) {
                    long m;
                    int n=scan.nextInt();
                    m=scan.nextLong();
                    long [] c=new long[n+1];
                    long sumb=0,suma=0;
                    for(int i=0;i<n;i++) {
                        long a,b;
                        a=scan.nextLong();
                        b=scan.nextLong();
                        c[i]=a-b;
                        sumb+=b;
                        suma+=a;
                    }
                    int ans=0;//压缩数量
                    if(sumb>m)
                        ans=-1;
                    else{
                        
                        Arrays.sort(c,0,n);
                        for(int i=n-1;i>=0;i--) {
                            if(suma<=m) {
                                break;
                            }
                            suma-=c[i];
                            ans++;
                        }
                    }
                    out.println(ans);
                 
            }
     
        }
    }
        
       //自己写出Scanner原本的输入语法,封装在InputReader类里
        static class InputReader {
            public BufferedReader reader;
            public StringTokenizer tokenizer;
     
            public InputReader(InputStream stream) {
                reader = new BufferedReader(new InputStreamReader(stream), 32768);
                //32768是输入缓冲区大小,随便设的
                tokenizer = null;
            }
     
            public String next() {
                while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                    try {
                        tokenizer = new StringTokenizer(reader.readLine());
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
     
            
            
            
            public int nextInt() {
                return Integer.parseInt(next());
            }
     
            public long nextLong() {
                return Long.parseLong(next());
            }
            
            public double nextDouble() {
                return Double.parseDouble(next());
            }
    
            public boolean hasNext() {
                try {
                    String string = reader.readLine();
                    if (string == null) {
                        return false;
                    }
                    tokenizer = new StringTokenizer(string);
                    return tokenizer.hasMoreTokens();
                } catch (IOException e) {
                    return false;
                }
            }
            
            public BigInteger nextBigInteger() {//大数
                return new BigInteger(next());
            }
     
        }
    }
    View Code
  • 相关阅读:
    dimensionality reduction动机---data compression(使算法提速)
    K-means:如何选择K(cluster的数目)
    python2和python3共存方法
    docker postgresql 数据库
    转:MySQL到底能支持多大的数据量?
    数据库jdbc链接:mysql, oracle, postgresql
    python获取参数列表
    转载:ubuntu系统启动顺序,常见系统服务说明
    使用postman开发testcases记录贴
    python gevent使用例子
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/12113790.html
Copyright © 2011-2022 走看看