java写入加速

Wesley13
• 阅读 802

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

java写入加速 java写入加速

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

思路:矩阵前缀和+二分

java写入加速 java写入加速

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

思路:贪心

java写入加速 java写入加速

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
!(https://oscimg.oschina.net/oscnet/3e08a942dd884e9ab82b63a1f3c4aada.jpg"未命名文件.jpg")Java技术栈不可错过的Java 技术公众号!(https://oscimg.oschina.net/oscnet/00fcff52518e
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Linux 是如何管理内存的?
点击蓝色“Java建设者”关注我哟加个“星标”,及时阅读最新技术文章!(https://oscimg.oschina.net/oscnet/df3cbbbafd5ae35c3c30f1b0081db3e740f.png)这是Java建设者第106篇原创文章Linux内存管理模型非常直接明了,因为Lin
Stella981 Stella981
3年前
Js使用面向对象和面向过程的方法实现拖拽物体的效果
1.面向过程的拖拽实现代码:!(https://oscimg.oschina.net/oscnet/d680c759957babef2fec0902676eaa35ad9.gif)<!DOCTYPEhtml<html<head<titledragDiv</title
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这