解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论

题目1、好好学习

汤姆跟爷爷来中国旅游。一天,他帮助中国的小朋友贴标语。他负责贴的标语是分别写在四块红纸上的四个大字:“好、好、学、习”。但是汤姆不认识汉字,他就想胡乱地贴成一行。

请你替小汤姆算一下,他这样乱贴,恰好贴对的概率是多少?

答案是一个分数,请表示为两个整数比值的形式。例如:1/3 或 2/15 等。

如果能够约分,请输出约分后的结果。

注意:不要书写多余的空格。

请严格按照格式,通过浏览器提交答案。

注意:只提交这个比值,不要写其它附加内容,比如:说明性的文字。

结果:1 / 12

题目2、埃及分数

古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解。古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式。

这里,a 和 b 必须是不同的两个整数,分子必须为 1

比如,2/15 一共有 4 种不同的分解法(姑且称为埃及分解法):

1/8 + 1/120

1/9 + 1/45

1/10 + 1/30

1/12 + 1/20

那么, 2/45 一共有多少个不同的埃及分解呢(满足加法交换律的算同种分解)? 请直接提交该整数(千万不要提交详细的分解式!)。

请严格按照要求,通过浏览器提交答案。

注意:只提交分解的种类数,不要写其它附加内容,比如:说明性的文字

7

public class Main {

    public static void main(String[] args) {
int count = 0;
for(int a = 1;a < 2000;a++) {
for(int b = 1;b < 2000;b++) {
if(45 * (a + b) == 2 * a * b) {
count++;
System.out.println("a = "+a+", b = "+b);
}
}
}
System.out.println("count = "+count / 2);
}
}

题目3、金蝉素数

考古发现某古墓石碑上刻着一个数字:13597,后研究发现:
这是一个素数!
并且,去掉首尾数字仍是素数!
并且,最中间的数字也是素数!
这样特征的数字还有哪些呢?通过以下程序的帮助可以轻松解决。请仔细阅读代码,并填写划线部分缺失的代码。
public class A
{
static boolean isPrime(int n)
{
if(n<=1) return false;
for(int i=2; i*i<=n; i++){
if(n%i==0) return false;
}
return true;
} static void f(int[] x, int k)
{
if(_____________________________){ // 填空位置
if(isPrime(x[0]*10000 + x[1]*1000 + x[2]*100 + x[3]*10 + x[4]) &&
isPrime(x[1]*100 + x[2]*10 + x[3]) &&
isPrime(x[2]))
System.out.println(""+x[0]+x[1]+x[2]+x[3]+x[4]);
return;
} for(int i=k; i<x.length; i++){
{int tmp=x[k]; x[k]=x[i]; x[i]=tmp; }
f(x,k+1);
{int tmp=x[k]; x[k]=x[i]; x[i]=tmp; }
}
}
static void test()
{
int[] x = {1,3,5,7,9};
f(x,0);
}
public static void main(String[] args)
{
test();
}
}
请分析代码逻辑,并推测划线处的代码,通过网页提交。
注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!! k == x.length

题目4、横向打印二叉树

二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。
当遇到空子树时,则把该节点放入那个位置。
比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如图1所示。
本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树。
输入数据为一行空格分开的N个整数。 N<100,每个数字不超过10000。
输入数据中没有重复的数字。
输出该排序二叉树的横向表示。 对应上例中的数据,应输出:
|-12
10-|
|-8-|
| |-7
|-5-|
|-4 为了便于评卷程序比对空格的数目,请把空格用句点代替:
...|-12
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4
例如:
用户输入:
5 20
则程序输出:
...|-20
10-|
...|-5 再例如:
用户输入:
10 20 8 4 7
则程序输出:
.......|-20
..|-10-|
..|....|-8-|
..|........|-7
5-|
..|-4
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner;

public class Main {
public static int begin; static class Tree {
public int value;
public int left;
public int right; public Tree(int value, int left, int right) {
this.value = value;
this.left = left;
this.right = right;
}
} public void dfs(int start, Tree[] tree, String s1, String s2, int n) {
if(start == begin)
s1 = s1 + tree[start].value;
else {
s1 = s1 + "-|-";
s1 = s1 + tree[start].value;
}
if(tree[start].right != -1) {
s2 = s2 + "1";
dfs(tree[start].right, tree, s1, s2, n + 1);
s2 = s2.substring(0, s2.length() - 1);
}
int t = 0;
for(int i = 0;i < s1.length();i++) {
if(s1.charAt(i) == '|') {
if(s2.length() <= t + 1 || s2.charAt(t) != s2.charAt(t + 1))
System.out.print("|");
else
System.out.print(".");
t++;
} else if(t < n) {
System.out.print(".");
} else
System.out.print(s1.charAt(i));
}
if(tree[start].left != -1 || tree[start].right != -1)
System.out.print("-|");
System.out.println();
if(tree[start].left != -1) {
s2 = s2 + "0";
dfs(tree[start].left, tree, s1, s2, n + 1);
s2 = s2.substring(0, s2.length() - 1);
}
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String A = in.nextLine();
String[] arrayA = A.split(" ");
Tree[] tree = new Tree[10005];
for(int i = 0;i < arrayA.length;i++) {
int v = Integer.valueOf(arrayA[i]);
tree[v] = new Tree(v, -1, -1);
}
int start = Integer.valueOf(arrayA[0]);
begin = start;
for(int i = 1;i < arrayA.length;i++) {
int v = Integer.valueOf(arrayA[i]);
int temp = start;
while(true) {
if(v > temp) {
if(tree[temp].right == -1) {
tree[temp].right = v;
break;
} else
temp = tree[temp].right;
} else {
if(tree[temp].left == -1) {
tree[temp].left = v;
break;
} else
temp = tree[temp].left;
}
}
}
String s1 = "";
String s2 = "";
test.dfs(start, tree, s1, s2, 0);
}
}

题目5、危险系数

抗日战争时期,冀中平原的地道战曾发挥重要作用。

地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。

我们来定义一个危险系数DF(x,y):

对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。

本题的任务是:已知网络结构,求两站点之间的危险系数。

输入数据第一行包含2个整数n(2 <= n <= 1000), m(0 <= m <= 2000),分别代表站点数,通道数;

接下来m行,每行两个整数 u,v (1 <= u, v <= n; u != v)代表一条通道;

最后1行,两个数u,v,代表询问两点之间的危险系数DF(u, v)。

输出:一个整数,如果询问的两点不连通则输出-1.

例如:

用户输入:

7 6

1 3

2 3

3 4

3 5

4 5

5 6

1 6

则程序应该输出:

2

资源约定:

峰值内存消耗(含虚拟机) < 64M

CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

import java.util.ArrayList;
import java.util.Scanner; public class Main {
public static int n, m, start, end;
public static ArrayList<Integer>[] map;
public static int count, root;
public static int[] DFN;
public static int[] Low;
public static int[] Parent;
public ArrayList<Integer> point; public void init() {
count = 0;
root = 1;
DFN = new int[n + 1];
Low = new int[n + 1];
Parent = new int[n + 1];
point = new ArrayList<Integer>();
for(int i = 1;i <= n;i++) {
DFN[i] = -1;
Low[i] = -1;
Parent[i] = -1;
}
} public void TarJan(int begin, int parent) {
DFN[begin] = ++count;
Low[begin] = DFN[begin];
Parent[begin] = parent;
int Childern = 0;
for(int i = 0;i < map[begin].size();i++) {
int j = map[begin].get(i);
if(DFN[j] == -1) {
Childern++;
TarJan(j, begin);
Low[begin] = Math.min(Low[begin], Low[j]);
if(begin == root && Childern > 1) {
if(!point.contains(begin))
point.add(begin);
} else if(begin != root && Low[j] >= DFN[begin]) {
if(!point.contains(begin))
point.add(begin);
}
} else if(j != Parent[begin]) {
Low[begin] = Math.min(Low[begin], DFN[j]);
}
}
} public void dfs(int begin, boolean[] visited) {
visited[begin] = true;
for(int i = 0;i < map[begin].size();i++) {
int j = map[begin].get(i);
if(visited[j] == false)
dfs(j, visited);
}
} public void getResult() {
boolean[] visited = new boolean[n + 1];
dfs(start, visited);
if(visited[end] == false) {
System.out.println("-1");
return;
}
init();
TarJan(1, 0);
int count = 0;
for(int i = 0;i < point.size();i++) {
int j = point.get(i);
if(j != start && j != end) {
visited = new boolean[n + 1];
visited[j] = true;
dfs(start, visited);
if(visited[end] == false)
count++;
}
}
System.out.println(count);
} @SuppressWarnings("unchecked")
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
map = new ArrayList[n + 1];
for(int i = 1;i <= n;i++)
map[i] = new ArrayList<Integer>();
for(int i = 1;i <= m;i++) {
int u = in.nextInt();
int v = in.nextInt();
map[u].add(v);
map[v].add(u);
}
start = in.nextInt();
end = in.nextInt();
test.getResult();
}
}

题目6、公式求值

输入n, m, k,输出图1所示的公式的值。其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数。组合数的计算公式如图2所示。

输入的第一行包含一个整数n;第二行包含一个整数m,第三行包含一个整数k。

计算图1所示的公式的值,由于答案非常大,请输出这个值除以999101的余数。

【样例输入1】

3

1

3

【样例输出1】

162

【样例输入2】

20

10

10

【样例输出2】

359316

【数据规模与约定】

对于10%的数据,n≤10,k≤3;

对于20%的数据,n≤20,k≤3;

对于30%的数据,n≤1000,k≤5;

对于40%的数据,n≤10^7,k≤10;

对于60%的数据,n≤10^15,k ≤100;

对于70%的数据,n≤10^100,k≤200;

对于80%的数据,n≤10^500,k ≤500;

对于100%的数据,n在十进制下不超过1000位,即1≤n<10^1000,1≤k≤1000,同时0≤m≤n,k≤n。

【提示】

999101是一个质数;

当n位数比较多时,绝大多数情况下答案都是0,但评测的时候会选取一些答案不是0的数据;

资源约定:

峰值内存消耗(含虚拟机) < 128M

CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。







这道题附上一个思路方便读者了解

Lucas定理加上一些数学处理转换。直接给大家个链接吧http://tieba.baidu.com/p/2832505865。重点可以看看

十四楼对这道题的处理方法,还是不太懂的话可以草稿纸上演算演算。注意dp[i][j]代表第i次求导后(xj)*(1+x)(n-j)的系数。然后具体写代码的时候,方法返回类型尽量处理为long,能取模就取模,尽量少用大数直接加减乘除运算操作,不然后面的数据会超时(我一开始就直接用大数写,最后两个点超时了,前面几个点也比较灵异地出现了错误答案)。其他标程逆元部分似乎是利用费马小定理,然后a^(p-2)模p为a模p的逆元,而我是直接利用扩展欧几里得求a模p的逆元。对了,还要注意lucas定理利用时,如果c(n%p,m%p)中n%p<m%p,则值应直接返回0而不是1(这就是那个测试点的问题所在)

import java.math.BigInteger;
import java.util.Scanner;
class Number {
long x,y,dd; /**
* @param x
* @param y
* @param dd
*/
public Number(long x, long y, long dd) {
super();
this.x = x;
this.y = y;
this.dd = dd;
} /**
*
*/
public Number() {
super();
// TODO Auto-generated constructor stub
} }
public class Main {
static BigInteger n, m;
static int k;
static long monum = 999101;
static BigInteger mobig = new BigInteger("999101");
static BigInteger big2 = new BigInteger("2");
static long ansnum1,ans;
static long dp[][], bignum[], subnum[];
static long fact[];
private static Number gcd(long a,long b) {
if (b==0) return new Number(1,0,a);
Number number=gcd(b, a%b);
long x=number.y;
long y=number.x-(a/b)*number.y;
long dd=number.dd;
return new Number(x,y,dd);
}
private static long mod_inverse(long num) {
if (num==0) return 0;
Number number=gcd(num, monum);
long x=(number.x+monum)%monum;
return x;
}
private static long cal(BigInteger num) {
if (num.equals(BigInteger.ZERO)) return 1;
if (num.equals(BigInteger.ONE)) return 2;
long mnum = cal(num.divide(big2));
mnum = mnum*mnum%monum;
BigInteger mo = num.mod(big2);
if (mo.equals(BigInteger.ONE))
mnum=mnum*2%monum;
return mnum;
} private static void init() {
fact = new long[(int) (monum + 1)];
fact[0] = 1;
for (int i = 1; i <= monum; i++)
fact[i]=(fact[i-1]*(long)i)%monum;
}
private static long calc(int n,int m) {
if (n<m) return 0;
long mo=fact[m]*fact[n-m]%monum;
long divnum=mod_inverse(mo);
long res=fact[n]*divnum%monum;
return res;
}
private static long lucas(BigInteger n,BigInteger m){
if (m.equals(BigInteger.ZERO)) return 1;
int nmo=n.mod(mobig).intValue();
int mmo=m.mod(mobig).intValue();
return calc(nmo, mmo)*lucas(n.divide(mobig),m.divide(mobig))%monum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner reader = new Scanner(System.in);
n = reader.nextBigInteger();
m = reader.nextBigInteger();
k = reader.nextInt();
BigInteger kbig=new BigInteger(String.valueOf(k));
dp = new long[k + 1][k + 1];
dp[0][0]=1;
long mon=n.mod(mobig).longValue();
for (int i = 0; i <= k - 1; i++)
for (int j = 0; j <= i; j++) {
dp[i + 1][j] = (dp[i+1][j]+(long)j*dp[i][j])%monum;
dp[i + 1][j + 1] =(dp[i+1][j+1]+(long)(mon-j+monum)*dp[i][j])%monum;
}
long mulnum =cal(n.subtract(kbig));
for (int i = k; i >= 0; i--) {
ansnum1 =(ansnum1+dp[k][i]*mulnum)%monum;
mulnum = (mulnum*2)%monum;
}
init();
ans=ansnum1*lucas(n, m)%monum;
System.out.println(ans);
} }

第四届蓝桥杯JavaC组国(决)赛真题的更多相关文章

  1. 第四届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字 ...

  2. 第六届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中, A类含有:8个轮子,1个传感器 B类含有: 6个轮子,3个传感器 C类含有 ...

  3. 第八届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.数位和 题目描述 数学家高斯很小的时候就天分过人.一次老师指定的算数题目是:1+2+-+100. 高斯立即做出答案:5050! 这次你 ...

  4. 第三届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1. 填算式 [结果填空] (满分11分) 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. ...

  5. 第七届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可 ...

  6. 第六届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...

  7. 第六届蓝桥杯JavaA组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有 ...

  8. 第九届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) 求该三角 ...

  9. 第五届蓝桥杯JavaA组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个 ...

随机推荐

  1. Jmeter-函数助手之${__RandomString(,,)}使用

    ${__RandomString(,,)}使用方法 1.在日常写脚本中,可以随机生成指定的几个字符串作为入参的value,那么jmeter 的这个工具就特别好用.  应用: 2.填写接口入参, 3.运 ...

  2. python 基础知识1

    一.编译型与解释性区别: 编译型:一次性将全部的代码编译成二进制文件.(如:C.C++) 优点:运行效率高 缺点:开发速度慢,不能跨平台. 解释型:当程序运行时,从上至下一行一行的解释成二进制.(如p ...

  3. Netty 中的粘包和拆包

    Netty 底层是基于 TCP 协议来处理网络数据传输.我们知道 TCP 协议是面向字节流的协议,数据像流水一样在网络中传输那何来 "包" 的概念呢? TCP是四层协议不负责数据逻 ...

  4. tomcat和nginx介绍

    tomcat为什么需要装java环境? 因为tomcat是用java写的, 所以运行需要JRE,就是JAVA运行时刻环境,所以必须通过安装JDK来得到这个运行环境,不装JDK装JRE也行sun的网站上 ...

  5. interface和abstract 的区别和相同点

    在Java语言中,abstract class和interface是支持抽象类定义的两种机制. 不能创建abstract类的实例,然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例 ...

  6. 【python深度学习】KS,KL,JS散度 衡量两组数据是否同分布

    目录 KS(不需要两组数据相同shape) JS散度(需要两组数据同shape) KS(不需要两组数据相同shape) 奇怪之处:有的地方也叫KL KS距离,相对熵,KS散度 当P(x)和Q(x)的相 ...

  7. docker基本维护命令

    docker search centos ##查服务器上面的镜像:docker images ##查本地的镜像.docker pull centos ##拉镜像. docker run centos ...

  8. Poj2586 每五个月都是亏

    题目大意: MS公司(我猜是微软)遇到了千年虫的问题,导致数据大量数据丢失.比如财务报表.现在知道这个奇特的公司每个月不是盈利就是亏损(废话),而且无论是盈利和亏损都有一个定值(亏少了它还不干).经过 ...

  9. 学习ASP.NET Core(08)-过滤搜索与分页排序

    上一篇我们介绍了AOP的基本概览,并使用动态代理的方式添加了服务日志:本章我们将介绍过滤与搜索.分页与排序并添加对应的功能 注:本章内容大多是基于solenovex的使用 ASP.NET Core 3 ...

  10. JAVA反射整理总结

    //1.通过对象获取            Person p=new Person();            Class c=p.getClass();                //2.通过类 ...