1,题目:
数值游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description: 为考验各自的数学能力,小B和小A经常在一起玩各种数值游戏,这一次他们又有了一种新玩法。每人从指定的数值范围中各自选择一个整数,记小A选择的数值为a,小B选择的数值为b。他们用一个均匀分布的随机数发生器在该数值范围中随机生成一个整数c,定义制胜的游戏规则为谁选的数离c近则谁取得胜利。由于小B是女生,特别定义当两人的数与c之间的差值相等时,小B获胜。 由于先前的游戏中,小A为表现绅士风度总是输多赢少,因此他特别渴望这次能够给小B比较深刻的映像,所以向你求助。你事先已经知道了小B所选的数值和指定的数值范围,小A希望你帮他选择一个数值使得他获胜的概率最大。 输入 输入有若干行,每行为一组数据,包含两个正整数n和b,分别表示数值范围和小B所需的数,其中1<=b<=n<=10^9 输出 对每组输入,在单独的行中输出一个数,为小A所选的数,使得小A获胜的概率最大。若存在多个这样的数,则输出最小的那个 样例输入 3 1 4 3 样例输出 2 2
答案:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); int b = in.nextInt(); int a = 0; if (b <= n / 2) { a = b + 1; } else { a = b - 1; } System.out.println(a); } } } // 附上用暴力解法做出来的。但是TLE了。 //import java.util.Scanner; ///** // * @author 李春跃-北京邮电大学研二-Hadoop工程师岗位-15210876339(yueyeli@163.com) // * 思路:利用暴力扫描的方式从头到尾,计算1-n这些数出现的时候,A,B所猜数字赢的概率分别是多少。 // * 注意: // * 1,差值相等时候B赢。(代码23行) // * 2,因为题目已经告知B赢的多了,所以现在只要A猜一个和B赢的概率一样多的,此刻下他赢的概率也比较大。(代码29行) // */ //public class Main { // public static void main(String[] args) { // Scanner in = new Scanner(System.in); // while (in.hasNext()) { // int n = in.nextInt(); // int b = in.nextInt(); // int numB = 0; // int numA = 0; // for (int i = 1; i <= n; i++) { // numA = 0; // numB = 0; // int a = i; // for (int j = 1; j <= n; j++) { // if ((int)Math.abs(a - j) < (int)Math.abs(b - j)) { // numA++; // } else { // numB++; // } // } // if (numA >= numB) { // System.out.println(i); // break; // } // } // } // } //}
2,题目:
字符置换 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description: 小B最近迷上了字符串处理技术,他设计了各种处理方式,并计算字符串的属性。这次也不例外,他定义了一种新的字符置换方式。小B研究的字符串由ASCII码字母和“.”构成,这次的研究对象是“.”。他关心的对象是字符串中出现的连续两个“.”。若每次操作把其中最开始的连续两个“.”以一个“.”替代,则可以将函数f(s) 定义为使得串中不出现连续两个“.”的最小置换次数。 现考虑m个字符替换操作,每次将指定位置的字符替换为给定的字符,求替换后函数f(s)的值。 输入 输入有若干组,每组的第一行为两个整数n和m,1<= n,m<=300000,表示字符串的长度和字符替换操作的次数。第二行为所给的字符串,随后紧跟m行操作,每行由一个正整数x和一个字母c构成,表示将字符串中位置m处的字符置换为字母c。 输出 对每组输入的每个置换操作,在单独的行中输出函数f(s)的结果 样例输入 10 3 .b..bz.... 1 h 3 c 9 f 4 4 .cc. 2 . 3 . 2 a 1 a 样例输出 4 3 1 1 3 1 1
答案:
import java.util.Scanner; /** * @author 李春跃-北京邮电大学研二-Hadoop工程师岗位-15210876339(yueyeli@163.com) * 思路:根据输入每走一步都进行字符串的修改,利用字符数组来进行记录。 */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); int m = in.nextInt(); char[] c = new char[n]; String str = in.next(); for (int i = 0; i < n; i++) { c[i] = str.charAt(i); } for (int i = 0; i < m; i++) { int index = in.nextInt(); str = in.next(); char c1 = str.charAt(0); c[index - 1] = c1; // funs System.out.println(fun(c)); } } } public static int fun (char[] c) { int result = 0; for (int i = 0; i < c.length - 1; i++) { if(c[i] == ‘.‘ && c[i + 1] == ‘.‘) { result++; } } return result; } }
原文:http://www.cnblogs.com/yueyebigdata/p/5330439.html