java在ACM竞赛中的使用

ACM模式常见输入输出专题(Java版) Java语言ACM模式算法常见的输入输出练习。 阅读详情

        java简单功能强大,高精度类可以帮队员轻松地实现对大数操作,而不用C/C++手写高精度。使用java做题,不容易犯一些低级的错误,如: if (a = b)。刚刚接触acm的时候,笔者还不会使用java,为此还特地花了一个月时间学习了一下java语言。现在回过头来发现,学会在比赛中熟练地使用java其实根本不需要花很长时间......所以在这里小结一下java在acm比赛中的使用。

        1.开发环境

        打开喜闻乐见的Eclipse->新建一个Java Project->新建一个class。

        2.基本框架

import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{
	public static void main(String[] args)
	{
		
		System.out.println("Hello,ACM");
	}
}


        注:每道题通常都会注明java类名,如,BNUOJ的 Java class name:  Main ,类名必须要和其要求的一样。

        3.读取数据

import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner cin=new Scanner(System.in);
		int n;
		n=cin.nextInt();
		System.out.println(n);
	}
}
         4.输出结果

         例题:BNUOJ 1004 新生指导

import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner cin=new Scanner(new BufferedInputStream(System.in));
		while (cin.hasNext())
		{
			int n;
			n=cin.nextInt();
			System.out.println(n);
		}
	}
}

         5.数学函数

import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner cin=new Scanner(new BufferedInputStream(System.in));
		while (cin.hasNext())
		{
			int n;
			n=cin.nextInt();
			System.out.println(Math.sqrt(n));
		}
	}
}

        6.高精度整数BigInteger类

        例题:POJ 1503 Integer Inquiry

import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{
    public static void main(String[] args)
    {
        BigInteger b1,sum;
        Scanner cin=new Scanner(new BufferedInputStream(System.in));
        sum=new BigInteger("0");
        while (cin.hasNext())
        {
            b1=cin.nextBigInteger();
            if (b1.compareTo(new BigInteger("0")) == 0)
            {
                break;
            }
            sum=sum.add(b1);
        }
        System.out.println(sum);
    }
}

        7.高精度小数BigDecimal类

        例题:POJ 1001 Exponentiation

import java.math.*;
import java.util.*;
import java.io.*;
public class Main 
{
     public static void main(String[] args) 
     {
          Scanner in = new Scanner(System.in);
          while (in.hasNext()) 
          {
               BigDecimal R = in.nextBigDecimal();
               int n = in.nextInt();
               R = R.pow(n);
               String str = R.stripTrailingZeros().toPlainString();
               if (str.startsWith("0."))
                   str = str.substring(1);
               System.out.println(str);
          }
     }
}
      

        注:

        stripTrailingZeros() 
        返回类型为BigDecimal的小于此数的但除去尾部的0的数值。
        toPlainString()
        返回BigDecimal类型的String类型字符串。
        startsWith()
        确定此实例的开头是否与指定的字符串匹配。
        substring()
        返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。


        

        8.进制转换

        String st = Integer.toString(num, base);
         // 把num当做10进制的数转成base进制的st(base <= 35).
        int num = Integer.parseInt(st, base); 
        // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).   
        BigInter m = new BigInteger(st, base); 
        // st是字符串,base是st的进制.
                

        如果要将一个大数以2进制形式读入 可以使用cin.nextBigInteger(2); 当然也可以使用其他进制方式读入;
        如果要将一个大数转换成其他进制形式的字符串 使用cin.toString(2);//将它转换成2进制表示的字符串

      例题:POJ 2305 Basic remains

import java.io.*;
import java.util.*;
import java.math.*;

public class Main
{
    public static void main(String[] args)
    {
        int b;
        BigInteger p,m,ans;
        String str ;
        Scanner cin = new Scanner (new BufferedInputStream(System.in));
        while(cin.hasNext())
        {
            b=cin.nextInt();
            if(b==0)
                break;
            p=cin.nextBigInteger(b);
            m=cin.nextBigInteger(b);
            ans=p.mod(m);
            str=ans.toString(b);
            System.out.println(str);
        }
    }
}

         9.多线程编程

         在acm/icpc信息战看到的这篇文章中,提到了比赛中可以使用多线程,并且存在java优化时间常数的可能。故此处把这多线程运用也是列一下。

        例题:BNUOJ 1021 信息战(七)——情报传递

import java.math.BigInteger;
import java.util.*;
public class Main extends Thread
{
    public static Scanner cin=new Scanner(System.in);
    public int dir[][]={{1,0},{-1,0},{0,1},{0,-1}};
    public int x,y,m,n,p,px[],py[];
    public boolean ck[][];
    public BigInteger dp[][];
    public boolean flag;
    public void readData(Scanner cin)
    {
        int i,j;
        x=cin.nextInt();
        y=cin.nextInt();
        m=cin.nextInt();
        n=cin.nextInt();
        p=cin.nextInt();
        ck=new boolean[201][201];
        dp=new BigInteger[201][201];
        px=new int[p];
        py=new int[p];
        for (i=0; i<p; i++)
        {
            px[i]=cin.nextInt();
            py[i]=cin.nextInt();
        }
        flag=false;
    }
    public boolean judge(int x,int y)
    {
        if (x < 0 || x > 200 || y < 0 || y > 200)
            return false;
        if (ck[x][y] == false)
            return false;
        return true;
    }
    public void run()
    {
        int i,j;
        int tx=1,ty=1;
        for (i=0; i<201; i++)
        {
            for (j=0; j<201; j++)
            {
                ck[i][j]=true;
                dp[i][j]=BigInteger.ZERO;
            }
        }
        for (i=0; i<p; i++)
        {
            ck[px[i]][py[i]]=false;
            for (j=0; j<4; j++)
            {
                tx=px[i]+dir[j][0];
                ty=py[i]+dir[j][1];
                if (judge(tx,ty) == true)
                    ck[tx][ty]=false;
            }
        }
        dp[x][y]=BigInteger.ONE;
        if(x>m) 
            tx=-1;
        else
            tx=1;
        if(y>n) 
            ty=-1;
        else
            ty=1;
        for(i=x+tx;i!=m+tx;i+=tx)
        {
            if(judge(i,y)) dp[i][y]=dp[i][y].add(dp[i-tx][y]);
        }
        for(j=y+ty;j!=n+ty;j+=ty)
        {
            if(judge(x,j)) dp[x][j]=dp[x][j].add(dp[x][j-ty]);
        }
        for(i=x+tx;i!=m+tx;i+=tx)
        {
            for(j=y+ty;j!=n+ty;j+=ty)
            {
                if(judge(i,j) == false) continue;
                dp[i][j]=dp[i][j].add(dp[i-tx][j]).add(dp[i][j-ty]);
            }
        }
        flag=true;
    }
    public static void main(String[] args) 
    {
        Main m[];
        int prob,i;
        prob=cin.nextInt();
        m=new Main[prob];
        for (i=0; i<prob; i++)
        {
            m[i]=new Main();
            m[i].readData(cin);
            m[i].start();
        }
        for (i=0; i<prob; )
        {
            if (m[i].flag == true)
            {
                System.out.println(m[i].dp[m[i].m][m[i].n]);
                i++;
            }
        }
    }
}



貌似没人用java做ACM题 用C的居多 谈谈java 对于任何一个编程的人来讲,选择一门适合自己的语言都可以用一句话来形容----工欲善其事必先利其器,选择了一门适当的语言还得要深刻理解并灵活运用它的特点    我班同学参加比赛一般都用的是C语言 以唯斌大神为首.  C语言大家都知道,它更接近于机器语言,程序执行起来更快一些,而Java的编程与实现更简单,对于很多问题都有现成的数据结构和算法。    由于我自己对JAVA稍微熟悉一些,正在 阅读详情

相关推荐

ACM中使用java(完整版)

想了解更全面的资料,请下载该版本! 绝对是不可多得的好资源!

ACM中Java的使用

函数:add, subtract, divide, mod, compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf().(3) 在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢而已。

2401_86402190的博客 846

VSCODE编辑+EIDE插件调试+STM8_Debug插件调试+IAR_STM8工具链编译开发项目

1. 安装 在VS CODE安装EIDE、STM8-Debug插件 2. 使用 EIDE 创建一个 8/16 Bit MCU 项目 新建虚拟文件夹,把工程外部的文件添加进虚拟文件夹,实现工程和源文件之间的关系,而不用实际把源文件复制到工程目录下。 EIDE工程和源文件实现分开放置,EIDE(EIDE工程)、EWSTM8(IAR STM8工程)、Project(ST Visual Develop工程) 选择工具链 烧录工具选择 头文件包含目录 添加宏定义 3. 编译 4. 使用STM8

TrueLink的博客 5500

ACM中使用 JAVA v2. 1

ACM中使用JAVAv2.1 严明超 (Blog:mingchaoyan.blogbus.com Email:mingchaoyan@gmail.com) 0.前言 文前声明:本文只谈java用于acm,且不推荐大家把java作为自己的第一语言玩acm; 为防止大家过多的把本应学习算法的宝贵时间浪费在学习语言上,同时也为实现lcy一队一java的要求;我根据自己用java的...

tubaluer 239

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 302

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2055

acm 用java_ACM中使用JAVA的详细介绍

0x01:Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点:(1)最明显的好处是,学会Java,可以参加JavaChallenge。(2)对于熟悉C/C++的程序员来说,Java并不难学,找本书,一两周业余时间就可以搞定了。当然,这里只是指一般编程,想熟悉所有的Java库还是需要些时间的。事实上,Java只相当于C++的一个改进版,所有的语法都几乎是C++的,...

weixin_31565723的博客 981

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧

本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。

weixin_29234509的博客 397

算法竞赛Java选手的语言快速熟悉指南

有些使用输出不仅仅让我们输出结果,可能会让我们输出相应的结果式子,一般使用的System.out.printf()以及System.out.println(),前者就是只需要实现对应的功能函数关注函数传入的参数值以及我们需要返回的结果集即可,后者则需要我们从main方法开始完整的从读入开始截至最后的输出。给出题目以及相应的输入、输出案例,然后不会给你任何代码,让你从头文件开始去写输入、功能函数以及最后的输出。案例题我们来看Acwing网站上的。:所有的代码都需要自己去实现包括导包。我们来看下力扣的一道题。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 3700

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

Robot_PLC_HMI_Automation 4914

acm 用java_acm竞赛中使用java是一种什么体验?

Java在全球用的不算少:C++1946次提交,java111次提交C++1904次提交, java161 次提交C++1415 次提交,java74次提交几个很著名的Java手:C++相较于Java的优势:(1)STL容器或函数比Java标准库丰富,如acm中常用的:std::multimapstd::multisetstd::unique()std::upper_bound()std::low...

weixin_32440261的博客 794

手把手教你学Simulink--进阶电机控制场景实例:基于Simulink的直流电机双闭环调速系统抗负载扰动仿真

摘要:本文基于Simulink平台构建直流电机双闭环调速系统,重点研究其在工业传送带场景下的抗负载扰动性能。系统采用转速外环(稳速)和电流内环(限流)的嵌套结构,通过工程法整定PI参数,实现了转速跌落<10%、恢复时间<0.5s的优异抗扰性能。仿真结果表明,相比单闭环系统,双闭环控制使转速跌落率降低47%,恢复时间缩短75%。文中详细介绍了数学模型建立、Simulink模块实现及参数优化方法,并提供了完整代码和模型文件,为电机控制系统设计提供实用参考。

MHD0815的博客 179

acm java题_求ACM大神告知JAVA在一些ACM题目中的用法

展开全部先说一下Java对于ACM的一些优点吧:(1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间e5a48de588b662616964757a686964616f31333332643837基本可以搞定一般的编程,再用些时间了解一下Java库就行了。Java的语法和C++非常类似,可以说是C++的升级版,只是更加强调面向对象思想而已。(个人见解。。。)(2) 在一般比赛中,Ja...

weixin_28862967的博客 236

Cursor自动生成测试用例

或者把你已有的规则直接复制粘贴到这个文档内(这里我用的是Markdown格式和CSV格式的测试用例生成规则,可以同时生成Markdown和CSV格式的测试用例)。在AI对话框这里,我们可以看到Cursor会逐步来帮我们生成测试用例,先分析识别需求文档,然后生成测试用例,最后会进行质量检查,确保生成的用例符合规范。生成的Markdown格式,可直接导入Xmind,生成思维导图,对应到具体的功能模块看具体的测试点,逻辑会更直观一些。(1)选中规则文档和需求文档:@你的测试用例规则文档@你的需求文档。

十二测试录 2432

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

acm java输入输出_ACM中java如何快速输入输出

今天又遇到java做ACM超时的问题。然后网上找了好多方法,最后总结出自己的。java的Scanner 比较慢(出了名的了),但是ACM的要求有比较高。java其实有别的解决方案,就是使用StreamTokenizer与PrintWriter。也有大神有人使用别的方法,但我觉的都太麻烦了。首先是定义:StreamTokenizer in = new StreamTokenizer(new Buff...

weixin_36414025的博客 473

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java中大数据类在ACM中的应用

ACM/ICPC竞赛中会遇到许多高精度计算的题目,比如两个大整数相加(1111111111111111111111111111111111111111 + 22222343259435894305894301243)。如果我们还采用普通类型比如long long来存储这些值,是装不下这么大的值的了。 我们通常的做法是以字符串的形式保存值,然后编程模拟人的计算过程,例如 X = “111”;

runninghui的专栏 1233

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ACM-JAVA基础

  ACM中的JAVA(基础)   众所周知,Java拥有良好的可移植性。无论在软件还是硬件领域,它都得到了广泛的使用,但是任何语言都有其缺陷,Java也不例外,Java运行在Java虚拟机上,因而相比C/C++,运行速度就只能呵呵了。在ACM当中,也极少有使用的Acmer,本文档仅介绍一下ACM当中Java的一些基本的使用,仅供读者参考,限于作者水平,文章中若有错误或不足之处,恳请读...

weixin_30527551的博客 83

ACM入门知识-----ACM赛事介绍

国际大学生程序设计竞赛(英文全称:International Collegiate Programming Contest(简称ICPC))是由国际计算机协会(ACM)主办的。ACM国际大学生程序设计竞赛已经发展成为全球最具影响力的大学生程序设计竞赛。(以下简称ACM-ICPC)。 ACM-ICPC以团队的形式代表各学校参赛,每队由至多3名队员组成。每位队员必须...

斗code年华 6559

acm竞赛java很少,Java多线程在ACM竞赛中的应用

欢迎转载,转载请注明出处。转发注记:网上看到有少数人讨论过在ACM竞赛中使用多线程,但是在Online Judge上一般是不支持的。因为Online Judge都会限制CPU的使用权限,所以即使可以开启多线程,也不会有效果。但是在现场赛,有些时候是允许开启Java多线程的(C++一般不提供),于是存在用Java优化时间常数的可能。这种非常规方法,博主sweetsc称之为“旁门左道”。文章中的代码可...

weixin_39657444的博客 682

acm java输入输出_在竞赛ACM Java处理输入输出

一、Java之ACM注意点1.类名称必须采用publicclassMain方式命名2.在有些OJ系统上,即便是输出的末尾多了一个“”,程序可能会输出错误,所以在我看来好多OJ系统做的是非常之垃圾3.有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件4.在有多行数据输入的情况下,一般这样处理,...

weixin_35651995的博客 501

ACM/ICPC Java高精度计算

<br /><br />ACM/ICPC竞赛中会遇到许多高精度计算的题目,比如两个大整数相加(1111111111111111111111111111111111111111 + 22222343259435894305894301243)。如果我们还采用普通类型比如long long来存储这些值,是装不下这么大的值的了。<br />我们通常的做法是以字符串的形式保存值,然后编程模拟人的计算过程,例如<br />X = “111”;<br />Y = “999”;<br />X + Y用如下方法计算:<br

深秋的落叶 1775

ACM中Java的应用

转载自:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了。     Java的语法和C++非常类似,可以说是C++的升级版,只是更加强调面向对象思想而已。(个人见解。。。) (2) 在一般比赛中,Java程序会有额外的时间和空间,但真正进行大规模

深秋的落叶 876

Java 在acm中的使用

//原文地址:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了。Java的语法和C++非常类似,可以说是C++的升级版,只是更加强调面向对象思

Lazier’s blog 1004

【转】ACM中java的使用

转自:http://www.cnblogs.com/jackge/archive/2013/03/30/2990079.html ACM中java的使用这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。1. 输入:格式为:Scanner cin = new Scanner (new BufferedInp...

weixin_30343157的博客 66

ACM中java的使用

ACM中java的使用   这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。 1. 输入: 格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in)); 例程: import java.io.*;

今天天气不错 1735
上一篇: Lua脚本语言学习笔记
下一篇: BNUOJ 3869 Buying Hay
plusplus7
博客等级 码龄15年 59粉丝 173原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值