牛客小白月赛16

 

A 小石的签到题

链接:https://ac.nowcoder.com/acm/contest/949/A

来源:牛客网
题目描述

小石和小阳玩游戏,一共有 nn 个数,分别为 1∼n1∼n 。两人轮流取数,小石先手。对于每轮取数,都必须选择剩下数中的任意一个数 xx,同时还要取走 x,⌊x2⌋,⌊⌊x2⌋2⌋…x,⌊x2⌋,⌊⌊x2⌋2⌋… 如果某个数不存在,就停止取数(不能一个数都不取)。谁取走最后一个数,谁就输了。小石想知道自己能否获胜。 如果小石能赢,输出 “Shi”,否则输出 "Yang”(均不输出引号)。

思路:简单列举一下即可发现当且仅当 n==1 时,先手小石必输,其他情况下都必赢!

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        long n = in.nextLong();
        if(n == 1){
            System.out.println("Yang");
        }else{
            System.out.println("Shi");
        }
    }
}

B 小雨的三角形

链接:https://ac.nowcoder.com/acm/contest/949/B

来源:牛客网
题目描述

小雨手上有一个填满了数字的三角形。这个三角形一共有 nn 层,其中第 ii 层共有 ii个数,且第 11 个数和第 ii 个数均为 ii 。其余的数中,第 jj 个数是上一层中第 j−1j−1 个数和第 jj 个数的和。小雨想知道这个三角形第 xx 层到第 yy 层所有数的和,一共有 mm 个询问。

思路:试着写出来,可以发现每一层之和的规律 a[i] = 2*a[i-1]+2

import java.util.Scanner;

public class MainB {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		int[] a = new int[n];//每一层的所有数之和
		a[0] = 1;//第一层为1
		for(int i = 1; i < n; i++) {
			a[i] = (2*a[i-1]+2) % 1000000007;
		}
		
		for(int i = 0; i < m; i++) {
			int x = in.nextInt();
			int y = in.nextInt();
			long sum = 0;
			for(int j = x - 1; j <= y - 1; j++) {
				sum += a[j];
				sum = sum % 1000000007;
			}
			System.out.println(sum);
		}
		
	}
}

 

C 小石的海岛之旅

链接:https://ac.nowcoder.com/acm/contest/949/C
来源:牛客网
题目描述

暑假到了,小石和小雨到海岛上玩。
从水平方向看海岛可以看成 n个小块,每一个小块都有一个高度hi,
水位一开始为 0,随着水位的上升,海岛分成了若干块。
现在有 m 个询问,求当水位为ai时,海岛会分成多少块。

思路:暴力解决

时间复杂度:O(n*m)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int lands = in.nextInt();
		int count = in.nextInt();
		int[] land = new int[lands];
		for(int i = 0; i < lands; i++) {
			land[i] = in.nextInt();
		}
			
		int pre = 0;//前一次水位
		// count次询问
		for(int i = 0; i < count; i++) {
			//每一次询问,now表示该次的水位
			int now = in.nextInt();
			int dif = now - pre;//由于数组在上一次已经减去了上一次的水位,所以每次我们应该算水位差
			for(int j = 0; j < lands; j++) {
				land[j] -= dif;
			}
			int res = 0;//记录块数
			boolean temp = false;//记录前一个是否露出水面,如果露出则为true,不露出为false
			for(int j = 0; j < lands; j++) {
				if (!temp && land[j] > 0) {
					//如果前一个小岛不露出水面,这个小岛露出
					res++;
					temp = true;
					//如果下一个小岛露出水面,由于temp为true,所以res不用加1
				}
				if (temp && land[j] <= 0) {
					temp = false;
				}
			}
			pre = now;
			System.out.println(res);
		}
		
	}
}

D 小阳买水果

E 小雨的矩阵

链接:https://ac.nowcoder.com/acm/contest/949/E
来源:牛客网

题目描述

小雨有一个 n×nn×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步。矩阵上每个点都有一个点权 ai,jai,j 。
求走到终点的路径有多少不同的点权和。

 

思路:DFS,递归写法


import java.util.HashSet;
import java.util.Scanner;

public class MainE {
	
	static int N;
	static int[][] matrix;

	//存储不同的点权和
	static HashSet<Integer> set = new HashSet<>();

	public static void dfs(int x, int y, int sum) {
		if (x == N - 1 && y == N - 1) {
			set.add(sum);
			return;
		}
		if (x >= N || y >= N) {
			return;
		}
		//向下走
		dfs(x + 1, y, sum + matrix[x][y]);
		//向右走
		dfs(x, y + 1, sum + matrix[x][y]);
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		N = in.nextInt();
		matrix = new int[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				matrix[i][j] = in.nextInt();
			}
		}
		dfs(0, 0, 0);
		System.out.println(set.size());

	}

}

F 小石的妹子

链接:https://ac.nowcoder.com/acm/contest/949/F
来源:牛客网
题目描述

小石有 n 个妹子,每个妹子都有一个细心程度 ai 和一个热心程度 bi,小石想给她们一个重要程度 titi(重要程度为 1 表示最重要,重要程度越小表示越重要)。如果一个妹子 i 的细心程度和热心程度都比妹子 j 大,那么妹子 i 的重要程度要大于妹子 j 的重要程度,即妹子 i 比妹子 j 重要。
流程如下:
每次从所有没有重要程度的妹子中,找到若干妹子。对于这些妹子的任意一个,需要保证没有其他妹子比她更重要。然后把她们的重要程度标为 1 。下一次再从剩下没有重要程度的妹子中找到若干妹子,依然符合上述条件,然后把她们的重要程度标为 2,……,重复直到所有妹子都有自己的重要程度。
由于妹子太多,小石忙不过来,请你帮帮他。

备注:

1≤n≤10^5,1≤ai,bi≤10^9

G 小石的图形

链接:https://ac.nowcoder.com/acm/contest/949/G
来源:牛客网
题目描述

小石想在一面墙旁边建造一段长度为 n 的篱笆来围出一块地(如图)。



求最大的地的面积。

输出最大面积,保留 3 位小数

思路:小学数学,当且仅当绳子围成半圆时面积最大

注意:java中怎么保留小数后三位

import java.util.Scanner;

public class MainG {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNextInt()) {
			int n = in.nextInt();
			double res = 0.5 * n * n / Math.PI;
			int result = (int) Math.round(res * 1000);
			String r = String.format("%.3f", result / 1000.0);
			System.out.println(r);
		}
	}
}

H 小阳的贝壳

链接:https://ac.nowcoder.com/acm/contest/949/H
来源:牛客网
题目描述

小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 colicoli 。现在小阳有 3 种操作:

1 l r x:给 [l,r][l,r] 区间里所有贝壳的颜色值加上 xx 。

2 l r:询问 [l,r][l,r] 区间里所有相邻贝壳 颜色值的差(取绝对值) 的最大值(若 l=rl=r 输出 0)。

3 l r :询问 [l,r][l,r] 区间里所有贝壳颜色值的最大公约数。

备注:

1≤n,m≤105,1≤coli,x≤103,1≤opt≤3,1≤l≤r≤n

 

 

I 石头剪刀布

链接:https://ac.nowcoder.com/acm/contest/949/I
来源:牛客网

题目描述

小阳和小石玩石头剪刀布的游戏,他们在地上画了 n 个长度为 1 的格子。小阳一开始在 1 号格子,如果小阳赢了,那么他就能往前走 1 格(若在 n 号格子,则不往前走)。如果输了,就倒退 1 格(若在 1 号格子,则不往后走),平局原地不动。小阳已经知道了他石头剪刀布赢的概率是 aa,平的概率是 bb,显然输的概率是 1−a−b1−a−b。求小阳走到 n 号格子期望进行多少局石头剪刀布。
答案对 10^9+7取模。

输入描述:

第一行输入三个正整数 n,a,b,表示格子个数,小阳石头剪刀布赢的概率和平的概率。(概率已对 10^9+7 取模)

输出描述:

共一行,输出答案。

示例1

输入50 200000002 400000003

输出630223353

备注:

1≤n≤100,1<a,b<10^9+7

J 小雨坐地铁

链接:https://ac.nowcoder.com/acm/contest/949/J
来源:牛客网
题目描述

小雨所在的城市一共有 mm 条地铁线,分别标号为 1 号线,2 号线,……,m 号线。整个城市一共有 nn 个车站,编号为 1∼n1∼n 。其中坐 i 号线需要花费 aiai 的价格,每坐一站就需要多花费 bibi 的价格。i 号线有 cici 个车站,而且这 cici 个车站都已知,如果某一站有多条地铁线经过,则可以在这一站换乘到另一条地铁线,并且能多次换乘。现在小雨想从第 ss 个车站坐地铁到第 tt 个车站,地铁等待时间忽略不计,求最少花费的价格,若不能到达输出 -1 。(地铁是双向的,所以 ss 可能大于 tt)

输入描述:

第一行输入四个正整数 n,m,s,tn,m,s,t,分别表示车站个数,地铁线数,起点站和终点站。
第二行到第 m+1m+1 行,每行前三个数为 ai,bi,ciai,bi,ci,分别表示坐 i 号线的价格,i 号线每坐一站多花的价格,i 号线车站个数。接下来 cici 个数,表示 i 号线的每一个车站的编号,单调递增。

输出描述:
共一行,一个数表示最小花费,若不能到达输出 -1 

示例1

输入

5 2 1 4
2 2 3 1 3 5
2 1 4 2 3 4 5

输出

7

说明

坐 1 号线:花费 2;

1→31→3:花费 2;

换乘 2 号线:花费 2;

3→43→4:花费 1;

所以最小总花费为 7 。

备注:

1≤n≤103,1≤m≤500,1≤s,t≤n1≤n≤103,1≤m≤500,1≤s,t≤n

1≤ai,bi≤100,1≤ci≤n,m∑i=1ci≤105

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值