赛码网OJ规则

用readLine()代替read_line()

用readLine()代替read_line()

用readLine()代替read_line()

用readLine()代替read_line()

用readLine()代替read_line()


  1. // *项代表测试数据的时候固定不变的
  2. var n = 0; // *输入行计数:可以自动计算出行数
  3. var input=['1 2','3 4']; //输入两行
  4. // *模拟输入
  5. function read_line(){
  6. var line = input[n];
  7. n++;
  8. return line;
  9. }
  10. // *模拟输出
  11. function print(x){
  12. console.log(x);
  13. }
  14. /////////////模拟a+b
  15. (function(){
  16. var line;
  17. while(line = read_line()){
  18. line = line.split(' ');
  19. print(parseInt(line[0]) + parseInt(line[1]));
  20. }
  21. })();
  22. /////////////////////////////////////////////////////

多行数据处理

例如:当输入以下数据的时候:

3

1 1 1

9

1 5 -6 7 9 -16 0 -2 2

2

0 0

处理多行数据方法一:

  1. var line;
  2. var datas = [];
  3. while(line = read_line()){
  4. line = line.split('\n'); // 以行读取
  5. datas.push(line);
  6. }
  7. // print(datas) // 3,1 1 1,9,1 5 -6 7 9 -16 0 -2 2,2,0 0
  8. while (datas.length) {
  9. var n = datas[0];
  10. var arr = datas[1].toString().split(' '); // 最好toString()一下,强制为字符串哦~
  11. paper(n, arr); // 具体的函数
  12. datas.shift(datas[0]); // 重点:处理完成一组 弹出一组数据!
  13. datas.shift(datas[1]);
  14. }
  15. var line;
  16. var datas = [];
  17. while(line = read_line()){
  18. line = line.split('\n'); // 以行读取
  19. datas.push(line);
  20. }
  21. // print(datas) // 3,1 1 1,9,1 5 -6 7 9 -16 0 -2 2,2,0 0
  22. while (datas.length) {
  23. var n = datas[0];
  24. var data = datas[1].toString().split(' ').map(function (item) {
  25. return parseInt(item);
  26. });
  27. print(n);
  28. print(data);
  29. print('====')
  30. //paper(n, arr); // 具体的函数
  31. datas.shift(datas[0]); // 重点:处理完成一组 弹出一组数据!
  32. datas.shift(datas[1]);
  33. }

处理多行数据方法二:

例如:对于已经分好块的数据

1 2

1

2 3

// 没有这个,为了理解方便加的注释

1 2

1

1 2

  1. while(read_line()){ // 这里read_line()的意思是如果这一行有值,转换成布尔true
  2. var str1 = readLine().toString().split(' '); // 这里用的是拼接函数
  3. var str2 = readLine().toString().split(' ');
  4. var str = str1.concat(str2);
  5. str = str.uniq().sort(cmp).join(' '); // 自定义函数处理部分
  6. print(str);
  7. }

例如:

对于没有分好块儿的数据,一般第一个数字是代表一共有几个数据块儿

所以我们先把第一个数据块儿提取出来,再像前面已经分好块儿那样做即可

2 // 代表两个数据块儿

1 2

1

2 3

// 没有这个,为了理解方便加的注释

1 2

1

1 2

  1. var line = read_line();
  2. while(line){
  3. var str1 = readLine().toString().split(' '); // 这里用的是拼接函数
  4. var str2 = readLine().toString().split(' ');
  5. var str = str1.concat(str2);
  6. str = str.uniq().sort(cmp).join(' '); // 自定义函数处理部分
  7. line --; // 处理一组数据总数据数目减一
  8. print(str);
  9. }

js编程常用方法总结

1.join():数组->字符串,自动会加上逗号

2.split():字符串->数组,

3.strim():去除首尾空格

4.如果是单个数字,加上一层parseInt(),强制转换为整型

5.初始化的时候指定类型,

eg:

var num = 0; // Number

var arr = []; // 数组

6. 涉及到单个数字,或者数字的四则运算一定要parseInt

7. 清空上一组数据

8. 常见Math方法

9. num.toFixed(1)

其他常用方法:

  1. var max = Math.max.apply(Math,arr); // arr为已知数组
  2. toLocalUpperCase() // 转为大写字母

join():

用于把数组中的所有元素放入一个字符串。

元素是通过指定的分隔符进行分隔的。

split():

方法用于把一个字符串分割成字符串数组。

stringObject.split(separator,howmany)

separator必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。

howmany可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

  1. var str="How are you doing today?"
  2. document.write(str.split(" ") + "<br />") // How,are,you,doing,today?
  3. document.write(str.split("") + "<br />") // H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
  4. document.write(str.split(" ",3)) // How,are,you
  5. "2:3:4:5".split(":") //将返回["2", "3", "4", "5"]
  6. "|a|b|c".split("|") //将返回["", "a", "b", "c"]
  7. "hello".split("") //可返回 ["h", "e", "l", "l", "o"]
  8. "hello".split("", 3) //可返回 ["h", "e", "l"]
  1. 输入:
  2. 3
  3. 1 2 3 4
  4. // split('/n')读取后:
  5. ['3','1 2 3 4'];

小Tips

1.看清楚输入输出的格式

2.如果是大数据没有通过,很可能是read_line()读取除了问题,建议自己写一个拼接函数

pop():删除数组的最后一个元素,减少数组的长度,返回删除的值。

push(n):将参数加载到数组的最后,返回新数组的长度。

shift():删除数组的第一个元素,数组长度减1,返回删除的值。

unshift(n1,n2):把参数加载数组的前面,返回新数组的长度。

sort():按指定的参数对数组进行排序 ,返回的值是经过排序之后的数组

reverse():反转数组项的顺序,返回的值是经过排序之后的数组

concat(3,4):把两个数组拼接起来。 返回的值是一个副本

slice[start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组(不影响原数组)

1个参数:n.即:n到末尾的所有

2个参数:[start,end]

splice():

删除:2个参数,起始位置,删除的项数

插入:3个参数,起始位置,删除的项数,插入的项

替换:任意参数,起始位置,删除的项数,插入任意数量的项

链接:http://www.cnblogs.com/Yfling/p/6680159.html

indexOf()和lastIndexOf():接受两个参数,要查找的项(可选)和查找起点位置的索引

indexOf():从数组开头向后查找

lastIndexOf():从数组末尾开始向前查找

every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成数组。

forEach():对数组的每一项运行给定函数,这个方法没有返回值。

map():对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组。

some():对数组的每一项运行给定参数,如果该函数对任一项返回true,则返回true。以上方法都不会修改数组中的包含的值。

reduce()和reduceRight():缩小数组的方法,这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。

join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符

常用函数:

  1. // parseInt转换为数组函数,数据格式必须如下面data所示
  2. var data = '1 2 3 4 5 6';
  3. var toArray = function(data) {
  4. var arr = [];
  5. var str = data.slice(0).split(' ');
  6. for (var i = 0; i < str.length; i++) {
  7. arr.push(parseInt(str[i]));
  8. }
  9. return arr;
  10. }
  11. //大数拼接
  12. function readLine() { // 核心:大数拼接问题
  13. var line = ""
  14. var next = read_line()
  15. while(next.length >= 1024) {
  16. line += next;
  17. next = read_line();
  18. }
  19. line += next;
  20. return line;
  21. }
  22. Array.prototype.uniq = function() {
  23. var res = [];
  24. var json = {};
  25. for (var i =0; i < this.length; i++) {
  26. if (!json[this[i]]) {
  27. res.push(this[i]);
  28. json[this[i]] = 1;
  29. }
  30. }
  31. return res;
  32. }
  33. ////
  34. var sum = readLine();
  35. var data = readLine();
  36. var res = [];
  37. for (var i = 0; i < data.length; i++) {
  38. if (data[i] !== 'X' && data[i] !== '#') {
  39. var num = parseInt(data[i]);
  40. var start = (i - num) > 0 ? i - num : 0;
  41. var end = (i + num) < data.length ? i + num : data.length;
  42. for (var j = start; j <= end; j++) {
  43. if (data[j] === 'X') {
  44. res.push(j);
  45. }
  46. }
  47. }
  48. }
  49. print(res.uniq().length)
  50. // 去重函数:
  51. Array.prototype.uniq = function() {
  52. var res = [];
  53. var json = {};
  54. for (var i =0; i < this.length; i++) {
  55. if (!json[this[i]]) {
  56. res.push(this[i]);
  57. json[this[i]] = 1;
  58. }
  59. }
  60. return res;
  61. }
  62. 2:利用正则
  63. function unique(arr) {
  64. return arr.sort().join(",,").
  65. replace(/(,|^)([^,]+)(,,\2)+(,|$)/g, "$1$2$4").
  66. replace(/,,+/g, ",").
  67. replace(/,$/, "").
  68. split(",")
  69. }
  70. 3:ES6
  71. var uniq = function(arr) {
  72. return Array.from(new Set(arr));
  73. }
  74. let uniq = [...new Set(arr)]; // arr是需要去重的数组
  75. /////////////////////////////////////////////
  76. // 比较函数
  77. var cmp = function (a, b) {
  78. return a - b;
  79. }
  80. // 拼接函数
  81. function readLine() {
  82. var line = ""
  83. var next = read_line()
  84. while(next.length >= 1024) {
  85. line += next;
  86. next = read_line();
  87. }
  88. line += next;
  89. return line;
  90. }
  91. //最大值
  92. Math.max.apply(this, arr)
  93. // 比较x与y是否相等
  94. var equal = function(x, y) {
  95. var len1 = x.length;
  96. var len2 = y.length;
  97. if (len1 !== len2) return false; // 不相等
  98. for (var i = 0; i < len1; i++) {
  99. if (x[i] === y[i]) continue;
  100. else {
  101. return false;
  102. }
  103. }
  104. return true;
  105. }
  106. // 任意数组的全排列
  107. function permute(input) {
  108. var permArr = [],
  109. usedChars = [];
  110. function main(input){
  111. var i, ch;
  112. for (i = 0; i < input.length; i++) {
  113. ch = input.splice(i, 1)[0];
  114. usedChars.push(ch);
  115. if (input.length == 0) {
  116. permArr.push(usedChars.slice());
  117. }
  118. main(input);
  119. input.splice(i, 0, ch);
  120. usedChars.pop();
  121. }
  122. return permArr
  123. }
  124. return main(input);
  125. };
  126. console.log(permute([5, 3, 7, 1, 2]));

尚未总结:

根据某一属性排序:http://www.cnblogs.com/woodk/p/5535756.html

js按照两个条件排序:https://zhidao.baidu.com/question/1639668198909962740.html

  1. // 判断两个对象是否相等
  2. isequal = function(x, y) {
  3. if ( x === y ) {
  4. return true;
  5. }
  6. if ( ! ( x instanceof Object ) || ! ( y instanceof Object ) ) {
  7. return false;
  8. }
  9. if ( x.constructor !== y.constructor ) {
  10. return false;
  11. }
  12. for ( var p in x ) {
  13. if ( x.hasOwnProperty( p ) ) {
  14. if ( ! y.hasOwnProperty( p ) ) {
  15. return false;
  16. }
  17. if ( x[ p ] === y[ p ] ) {
  18. continue;
  19. }
  20. if ( typeof( x[ p ] ) !== "object" ) {
  21. return false;
  22. }
  23. if ( ! Object.equals( x[ p ], y[ p ] ) ) {
  24. return false;
  25. }
  26. }
  27. }
  28. for ( p in y ) {
  29. if ( y.hasOwnProperty( p ) && ! x.hasOwnProperty( p ) ) {
  30. return false;
  31. }
  32. }
  33. return true;
  34. };
  35. objA={
  36. a:'123',
  37. b:'000',
  38. c:'111'
  39. };
  40. objB={
  41. a:'123',
  42. b:'000',
  43. c:'111'
  44. };
  45. var isEqual= isequal(objA, objB);
  46. console.log(isEqual); // true
  47. print(JSON.stringify(objB)==JSON.stringify(objB))
  48. // 伪数组->数组
  49. var arr = Array.prototype.slice.call(arguments)
  50. var arr = Array.from(arguments);
  51. // 判断一个数字是否是素数
  52. function isPrime(num){
  53. // 不是数字或者数字小于2
  54. if(typeof num !== "number" || !Number.isInteger(num)){      // Number.isInterget 判断是否为整数
  55. return false;
  56. }
  57. //2是质数
  58. if(num == 2){
  59. return true;
  60. }else if(num % 2 == 0){ //排除偶数
  61. return false;
  62. }
  63. //依次判断是否能被奇数整除,最大循环为数值的开方
  64. var squareRoot = Math.sqrt(num);
  65. //因为2已经验证过,所以从3开始;且已经排除偶数,所以每次加2
  66. for(var i = 3; i <= squareRoot; i += 2) {
  67. if (num % i === 0) {
  68. return false;
  69. }
  70. }
  71. return true;
  72. }
  73. // 输出指定区间的素数
  74. var prime = function(len){
  75. var i,j;
  76. var arr = [];
  77. for(i = 1; i < len; i++){
  78. for(j=2; j < i; j++){
  79. if(i%j === 0) {
  80. break;
  81. }
  82. }
  83. if(i <= j && i !=1){
  84. arr.push(i);
  85. }
  86. }
  87. return arr;
  88. };

ES6 新增字符串扩展

  1. // for…of:
  2. let str="wbiokr";
  3. for(let s of str){
  4. console.log(s)
  5. }
  6. //结果:w, b, i, o, k, r
  7. // 判断一个字符串中是否包含一个字符(ES6)
  8. var str = "12345";
  9. print(str.includes('1')) // true
  10. //判断字符串是否以某个字符开头/结束 (ES6)
  11. print(str.includes('c')) // false
  12. print(str.startsWith('str')) // true
  13. print(str.endsWith('ng')) // true
  14. // 字符串复制
  15. var str = 'mo';
  16. print(str.repeat(2)) // momo

在线OJ使用总结(acm)的更多相关文章

  1. 程序猿常识--OJ系统和ACM测试考试大全

    OJ它是Online Judge缩写系统,来在线检測程序源码的正确性. 著名的OJ有RQNOJ.URAL等. 国内著名的题库有北京大学题库.浙江大学题库等. 国外的题库包含乌拉尔大学.瓦拉杜利德大学题 ...

  2. 在线OJ实用技巧(转载)

    1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long long或__int64型(两个下 ...

  3. 有关在线OJ网络AC爬虫

    搜索源码 爬取代码 自动登录 在线提交 判断AC

  4. 在线OJ的小demo

    牛课网OJ规则 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read ...

  5. 九度OJ 1339:ACM (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:712 解决:379 题目描述: 今年的ACM世界总决赛快要开始了,需要有一个排名算法来对每支队伍进行现场排名.ACM组委会把这个任务交给了你 ...

  6. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  7. 详解OJ(Online Judge)中PHP代码的提交方法及要点【举例:ZOJ 1001 (A + B Problem)】

    详解OJ(Online Judge)中PHP代码的提交方法及要点 Introduction of How to submit PHP code to Online Judge Systems  Int ...

  8. 各种OJ网站汇总

    acmicpc.info acmicpc.info http://acmicpc.info/archives/224 此网站聚合了各种ICPC相关信息. 国内Online Judge 用户体验极佳的v ...

  9. 从HD OJ 1005想到的

    杭电OJ [1005](http://acm.hdu.edu.cn/showproblem.php?pid=1005): #####Problem Description > A number ...

随机推荐

  1. IP网际协议 - IP首部,IP路由选择,子网掩码

    IP首部 4个字节的32 bit值以下面的次序传输:首先是0-7 bit,其次8-15 bit,然后1 6-23 bit,最后是24~31 bit.这种传输次序称作big endian字节序.由于T ...

  2. how tomcat works 总结

    希望各位网友在看完<<how tomcat works>>一书或者鄙人的tomcat专栏文章后再看这篇博客 这里主要是梳理各个章节的核心概念 第一章 一个简单的Web服务器 第 ...

  3. bash编程语法自我总结

    脚本2种执行方式: 1 直接执行,等于bash衍生一个子程序,当该子程序完成后,子程序内各项变量活动作不会传回父程序 2 利用source执行,直接在父程序中执行 X=/bin/xdo cmd 执行c ...

  4. 熊猫猪新系统测试之三:iOS 8.0.2

    本来本猫要等到8.1版本出来后再做测试的,结果等来等去就是迟迟不推送更新呀!说好10月20号的iOS 8.1呢?为了一鼓作气写完,就先不等了.先拿手头的iOS 8.0.2系统做一下测试吧! 8.x系统 ...

  5. 基于hashchange导航管理

    想在五一放假的时候写出来,由于放假有点兴奋,心早就跑了,不废话了. 说一下基于hashchange导航管理: 浏览器的历史记录导航是用户非常常用的功能,除了点击前进后退按钮外,Window上的hist ...

  6. C# 操作Excel数据透视表

    一.概述 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行号.列标和页字段.当改变版面布置时,数据透视表也会按照新的 ...

  7. OpenLayers3中wfs的属性查询

    var vector = new ol.layer.Vector({ source: new ol.source.Vector({ format: new ol.format.GeoJSON(), u ...

  8. jbpm 工作流(二)

    1           概述 本文主要介绍如何将JBPM+Struts+Spring+Hibernate整合在一块.并通过一个简单实例来说明.此实例为一个申请审批的简单流程,并将申请人和审批人记录到数 ...

  9. Javascript二(函数详解)

    一.函数            Javascript是一门基于对象的脚本语言,代码复用的单位是函数,但它的函数比结构化程序设计语言的函数功能更丰富.JavaScript语言中的函数是"一等公 ...

  10. Day5_协程函数_面向过程

    def func(count): while True: yield count count +=1 #这是一个生成器,需要利用next()来执行. func(10) #yield: #1.把函数的执 ...