java在acm中的应用

我对ACM初学者想说的话 1 算法学习 ACM算法的学习,一般看刘汝佳的系列书籍即可。初学者需要看的书是《算法竞赛入门经典》(俗称小白书),或者可以看《算法竞赛入门经典(第二版)》(俗称紫书)。理论上说,紫书的质量比小白书高得多,小白书介绍的内容紫书都有讲,紫书还增加了介绍C++语法的一个章节。但是紫书的题目相当灵活,对初学者来说未必简单(不要因为我这么说就以为小白书的题就容易了),大家可以都先看一看,最... 阅读详情

ACM中对编程语言的感悟
04级四班 张 祥
对于任何一个编程的人来讲 , 选择一门适合自己的语言都可以用一句话来形容 ----- 磨刀不误砍柴工 , 更有一句工欲善其事必先利其器 , 选择了一门适当的语言还得要深刻理解并灵活运用它的特点。
          我们这次参加比赛使用的是 Java 语言。按照常理讲,一般的真正的 ACM 高手至少会撑握两到三门语言,比如说 C 语言和 Java , C 语言大家都知道,它更接近于机器语言,程序执行起来更快一些,而 Java 的编程与实现更简单,对于很多问题都有现成的数据结构和算法。
          由于我自己对 JAVA 稍微熟悉一些,就谈谈 ACM 中 JAVA 的使用吧。对于其它的语言在这里就不多说了。
          正如前面所说的,许多问题 JAVA 中都已经有了现成的数据结构和算法。首先看看大数运算方面的问题, JAVA 中有两个类, BigInteger  和 BigDecimal ,两个用字符串实现的大整数和大十进制类,它们可以处理任意长度和精度的整数与十进制数,其中的有许多方法高效实现了大整数与大十进制数的各种运算,对于 BigDecimal  还可以设置精度。对于一些大数运算问题就可以直接使用,非常实用。
          接下来就是要灵活运用的就是 Java 自身的数据结构类了,包括 collection 接口里的实现类和子类,另外还有 Map 映射抽象类及子类等。在 ACM 中 TreeSet 和 TreeMap 是两个最常用的数据结构类, TreeSet 和 TreeMap 都能够实现其内容自然排序, Set 不允许其中的元素重复, Map 能实现键到值的映射。这两个类配合泛型的使用,使用起来将十分方便和有用。  Arrays 是 JAVA 中的数组排序类,可以实现到 Object 类数组的快速排序,并且还可以进行二分查找,当然在使用二分查找的时候肯定是要先排序的啦。
         JAVA 中实现数据的输入也非常方便,一般有两种方式,文件输入和标准控制台输入;输出同样有两种,文件输出和标准控制台输出。我们参加的这次比赛就是文件输入和标准控制台输出。对于 Java5 和 JDK1.4 的输入也有少许差别, Java5 有一个简单的 Scanner 类,对于少量的数据输入建议使用 Scanner 类,而对于大量数据输入的话还是建议采用 BufferedReader 类,对于 JDK1.4 就只有全部使用 BufferedReader 了。输出的话,一定要把 File ,FilerWrite,PrintWrite 三个类的细节搞清楚。这里也不多讲,列出这几个输放输出的具体使用实例吧:
输入:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
BufferedReader input = new BufferedReader(new FileReader(“1.txt”));
Scanner input = new Scanner(System.in) ;
输出:
System.out.println();
System.out.printf();
System.out.print()
PrintWrite output = new PrintWrite(new FileWrite(“1.txt”));
在处理输入与输出的时候也常常很讲究技巧性,尤其是在 ACM 这样很讲究编程技巧性的编程比赛中显得更为突出。
         ACM 中还会经常遇到字符串的处理方面的问题: StringBuffer  和 StringBuilder 这两个类有很多用用的方法可供使用,然后大家还可以注意一下 String  类和 StringBuffer 类的区别和特点,对于要进行大量变化的字符串处理建议使用 StringBuffer 类,而不是经常变化的字符串建议使用 String 类,它们特点取决于 Java 中对 String  和 StringBuffer 的内存分配不相同的原因了。大家可以编写一些测试程序来测试一下它们的特点和区别。另外字符串处理中经常可能要用到的是另外一个知识了,那就是正则表达式了,如果能够很好的撑握正则表达式的用法,那么字符串处理可以说你已经完成一半的任务了。如果正则表达式没有完全撑握, StringBuilder 就是它的一个替代品。另外 StringTokenizer 也是一个很有用的工具,在这里就不多谈了,大家可以编几个测试类多试试。
          格式化处理,一方面 Java5 之后就已经有了一个 printf ()方法,它跟 C 语言里的格式化输出有相同的功能和用法。另外 java.text.Format 类及其子类有更丰富的方法与功能,大家可以查看一下它的 API 文档。
          下面是我们写的一些测试程序 , 大家可以参考一下
//StringBuffer方法测试
import  java.lang.StringBuffer;
publicclass  StringBufferTest {
 
     publicstaticvoid  main(String[] args) {
       StringBuffer str =  new  StringBuffer( "abc" );
        StringBuffer str2 = str;
       str = str2.append(str.reverse());
       System. out .println(str);         //cbacba
       str.insert(1,  "aaaaaa" );
       System. out .println(str);     //caaaaaabacba
       System. out .println(str.charAt(1));      //a
       System. out .println(str.lastIndexOf( "ba" )); //10
    }
}
 
//BufferedReader方法测试
import  java.io.BufferedReader;
import  java.io.IOException;
import  java.io.InputStreamReader;
 
publicclass  BufferedReaderTest {
     publicstaticvoid  main(String[] args) {
       BufferedReader buff =  new  BufferedReader( new  InputStreamReader(System. in ));
       String test;
       StringBuffer stringBuff =  new  StringBuffer();
        try  {
            while (!(test = buff.readLine()).equals( "" )){
              stringBuff.append(test);
           }
       }  catch  (IOException e) {         
           e.printStackTrace();
       }
       System. out .println(stringBuff);
    }
}
 
//Map TreeMap方法测试
import  java.util.*;
publicclass  TreeMapTest {
     publicstaticvoid  main(String[] args){
       TreeMap<String, Integer> map =  new  TreeMap<String, Integer>();
       map.put( "1L" , 20);
       map.put( "2LR" , 30);
       map.put( "1R" ,100);
       map.put( "3LLL" , 20);
       map.put( "3LLR" ,20);
       map.put( "2LL" , 22);
       map.put( "2LL" , 20);
       System. out .println( "Key 的长度 :"  +map.size());
       System. out .println( "Key 的长度 :"  +map.keySet().size());
       System. out .println( "map.get():" +map.get( "1L" ));
       Map newMap = map.tailMap( "2LL" );
           System. out .println(newMap.toString());
           System. out .println(map.toString());
           System. out .println(map.subMap( "1L" ,  "2RR" ).toString());
            //{1L=20, 1R=100, 2LL=20, 2LR=30}
        while (!map.isEmpty())
       System. out .println(map.remove(map.firstKey()));
    }
}
 
//printf()测试
publicclass  Test4 {
     publicstaticvoid  main(String[] args){
        int [][] a={{1,2},{2,2,2,3},{3}};
       Object[] arg =  new  Object[]{ "Hello" , "world" };
       Object[] c =  new  Object[]{3,2,1};
        int [] d={1,1,1};
//     System.out.printf("%d %d %d/n",(Object)d);
       System. out .printf( "{%s %s %s}/n" ,1,2,3);
       System. out .printf( "%d %d %d/n" ,c);
       System. out .printf( "%s/n" ,  "Hello" , "world" );
       System. out .printf( "%s %s/n" , arg);
       System. out .printf( "%s/n" , new  Object[]{arg});
       System. out .printf( "%s/n" ,(Object)arg);
        assertfalse :1;
    }
}
//文件读写,在一个"CRC校验"题中用到的
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class Number6 {
 
         public static void main(String[] args) throws IOException {
         BufferedReader input = new BufferedReader(new FileReader("in2_6.txt"));
                   PrintWriter output = new PrintWriter(new FileWriter("out2_6.txt",true));
                   String s = input.readLine(),rs;
                   while(!(s==null || s.equals("#"))){
                            int t = 0,crc = 0;
                            for(int i=0;i<s.length();i++){
                                     t = (t*256+s.charAt(i))%34943;
                            }
                            crc = (34943-(t<<16)%34943)%34943;
                            rs = Integer.toHexString(crc).toUpperCase();
                            while(rs.length()<4)rs = 0+rs;
                            output.println(rs);
                            s = input.readLine();
                   }
                   output.close();
         }         
 }
总的来讲 , 做 ACM 题 , 最重要的是要对语言的语法特性及细节问题多测试 , 试了才知道效果。要想在比赛中取得好成绩,就必须多做题,做题是唯一的王道。


jQuery UI Layout插件:五区模型实现可拖拽后台布局 后台管理系统的界面布局常面临菜单、顶栏与内容区无法灵活适配的难题,手写拖拽逻辑不仅耗时,还容易在分辨率变化或iframe嵌入时出现错位。基于jQuery UI的全能布局插件Layout,通过北东南西中五区模型,将面板分割、拖拽调宽、折叠展开及状态持久化封装为现成组件,开发者只需配置容器与参数即可快速搭建稳固的页面骨架。本文从区域模型与最小初始化出发,讲解尺寸约束、事件回调、状态存储,并深入嵌套布局、iframe拖拽遮挡等复杂场景,最后给出常见问题排查与验收清单,帮助前端开发者将这套方案落地为高效的后台布局基 阅读详情

相关推荐

C语言ACM竞赛必看(30个程序)

C语言ACM竞赛必看(30个程序)

ACM经历总结[转载]

原文见http://www.th000fansxjj.com/wordpress/archives/32761by admin on 十一月 5th, 2009首先,我想说的就是,我是一个很普通的ACMer,高中没有参加过任何计算机和数学竞赛的经历,也没有ben那样过人的天资,努力至今也未能取得什么成绩,我之所以写下这篇文章,只是希望给刚进大学或者刚进ACM队的同学一点小小的帮助,希望你们

thestoryofsnow的专栏 1608

java中的acm包

Java开发的acm包 包括acm.graphics、acm.io、acm.gui、acm.program、acm.util

acm竞赛可以用python_在算法竞赛(ACM,CSP)中C++,Java,Python各有什么优劣?

使用c艹和py选手强答一波。大部分人的算法实现都是使用C艹,我个人认为相对于JAVA和Python来说,C艹是一个相对简洁优雅并且"听话"的语言(它的每一步操作我们大致知道发生了啥的)。JAVA代码写起来比较冗长,实现成本比较高,与算法竞赛对速度的需求是相悖的;Python过于简洁,底层黑盒子太多,有点不"听话",在某些问题的处理上着实不太让人放心。但是这两门语言都有一个共同的优点,那就是支持大数...

weixin_39517520的博客 3899

ACM中使用java(完整版)

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

利用Python实现纬度加权平均(即NCL中的wgt_areaave)

当处理全球数据的时候,最常见的分析就是全球、北半球平均了,这时候一定要注意要根据纬度等信息进行加权,求加权平均,要不然结果肯定会不准。但是对于Python中,常规的计算包里面是没有的,或许现在有其他包可以实现,也可以告诉我~。

记录基于python语言处理气象问题的一些代码,包括不限于气象数据读取、机器学习和深度学习建模。 5744

acm c 和java如何取舍,ACM中使用JAVA语言的优缺点介绍

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

weixin_42499586的博客 1066

ArcGIS:根据DEM数据提取区域水系

利用DEM数据提取区域水系是常见的水文分析应用,为了获取区域的矢量水系数据,我们可以通过ArcGIS对高程DEM数据进行水文分析,为地表水流建立模型,进而获取到该地的水系数据,DEM数据精度越高,获取到的水系数据精度也就越高。以下介绍如何用ArcGIS提供的工具提取水系。

Oruizn的博客 9109

ACM小白入门

我放弃了使用了六年的pascal,放弃了学了一学期的java,自学了C++。个人认为使用c++参加acm是最好的选择。原因如下: (1)c++代码比pascal和java更加简洁 (2)效率比java要高 (3)学好c++,c的代码你也能看的懂 (4)大部分选手使用的是c++,不会的题目看题解你能看的懂我用的IDE是codeblocks,简单易用,安装起来也很方便。现在主要是在HDO

勇敢前进的ACMer 1万+

人工智能训练师三级考试大纲深度解读|理论+实操分值分布+六大模块占比

三级人工智能训练师考试分为理论和实操两大模块(各100分,合格线60分)。理论考试包含AI基础(30%)、数据标注(25%)、模型训练(20%)、测试(15%)和系统运维(10%),题型为客观题;实操考核侧重数据标注(40%)、模型测试(35%)和系统运维(25%),采用现场操作形式。复习应优先关注AI基础和数据标注等高分值模块,实操需重点掌握标准流程和结果准确性(占评分70%)。考试要求两模块均达标,理论侧重概念理解,实操强调规范执行与文档完整。

白话机器学习 1093

减法平均优化器(SABO)算法详解:从数学原理到工程应用

减法平均优化器(SABO)是一种基于数学概念的新型元启发式优化算法,由Trojanovský和Dehghani于2023年提出。该算法通过v-减法运算和平均值计算实现搜索优化,核心创新是采用目标函数值差异符号引导搜索方向。SABO具有参数少、结构简单、收敛快等特点,在高维复杂问题中表现优异。算法通过种群平均值保持多样性,利用符号函数确保搜索方向改进,自然平衡探索与开发。MATLAB实现显示其计算复杂度为O(N²·D),与主流群体智能算法相当。SABO不依赖生物或物理隐喻,数学基础坚实,在工程优化和机器学习领

qq_42212808的博客 164

java acm_Java在ACM中的应用

Java在ACM中的应用—. 在java中的基本头文件(java中叫包)import java.io.*;import java.util.*; //输入Scannerimport java.math.*; //BigInteger && BigDecimal二. 输入与输出读入: Scanner cin = new Scanner (System.in);推荐:Scanner c...

weixin_39517520的博客 244

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2199

java的acm库_ACM中Java的应用

先说一下Java对于ACM的一些优点吧:(1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了。Java的语法和C++非常类似,可以说是C++的升级版,只是更加强调面向对象思想而已。(个人见解。。。)(2) 在一般比赛中,Java程序会有额外的时间和空间,但真正进行大规模运算时Java并不比C/C++慢,输入输出效率比较低而已(...

weixin_28909295的博客 269

LoRa无线通信技术介绍(六)SX127X芯片收发程序讲解

接收LORA芯片SX127X的收发程序。

DT程序员的博客 1751

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2257

java在ACM中的应用

 ACM模拟题讲解(1)-高精度       Java中提供了byte、short、int和long表示整数,float和double来表示浮点数,每种类型都有一定的表示范围,当超过了这个范围之后就不能处理了。为了提供对非常大的整数和浮点数的处理,Java提供了BigDecimal和BigInteger。下面的代码演示了BigDecimal和BigInteger的基本用法:     

自由女神 2148

【ROS2】手眼标定:moveit2_handeye_calib使用详解

moveit2_handeye_calib MoveIt2 官方的 手眼标定功能包,包含标定插件、图形化界面和示例程序。提供基于 ArUco/ChArUco 标定板的采集与求解功能。标定板下载aruco在线生成器。

郭老二 246

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

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

runninghui的专栏 1233

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

总结: Java BigInteger类在ACM中的应用

今天比赛碰到一题高精度,不想用c++码了,直接在jdk帮助文档上学习了一下BigInteger,并总结了该类的一些常用方法。总结一些BigInteger类的常用方法:1.基本运算加、减、乘、除、绝对值、求余、左移、右移、求幂abs()add(BigInteger)subtract(BigInteger)multiply(BigInteger)divide(BigInteger)mod(BigInt...

J. Cole 842

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ACM中Java的应用

<br />转载自:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html<br /> <br /> <br />转载自:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了。 Java的语法和C+

奴隶_wc的专栏 750

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java在ACM中的应用

Java在ACM中的应用 —. 在java中的基本头文件(java中叫包) import java.io.*; import java.util.*; //输入Scanner import java.math.*; //BigInteger && BigDecimal 二. 输入与输出 读入: Scanner cin = new Scanner (Syste...

weixin_33711647的博客 69

java在acm_Java在ACM中的应用

一、输入(主要是使用Scanner类)1、导入Scanner类:import java.util.Scanner;2、创建Scanner类的对象:Scanner cin=new Scanner(System.in);3、使用Scanner类的对象读入各种类型的数据:①读入数据(常用)读一个整数:int n=cin.nextInt(); 【C:scanf("%d",&n); 】 【C++:c...

weixin_30967451的博客 410

ACM JAVA中的应用

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

yangzhongmin21的专栏 571
上一篇: win32创建对话框遇到的各种问题
下一篇: poj 1220 java大数类
i丹明扬
博客等级 码龄15年 331粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值