import java.util.Scanner;
public class Test25 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[] arrs = new long[n];
long[] temp = new long[n];
for (int i = 0; i < n; i++) {
arrs[i] = sc.nextLong();
}
for (int i = 1; i <n ; i++) {
temp[i-1] = arrs[i] - arrs[i-1];
if(temp[i-1] <=0){
System.out.println(-1);
return;
}
}
long d = helper(temp[0],temp[1]);
for (int i = 2; i < n-1; i++) {
d = helper(temp[i],d);
}
System.out.println(d);
}
public static long helper(long num1,long num2){
if(num2 ==0){
return num1;
}else {
return helper(num2,num1%num2);
}
}
}
输入
3 50
100 50 51
1000 1000 1000
输出
1000
说明
如果先挑战第一只怪物,那么第一只对勇者造成1000点伤害,勇者御力提升1点,接下来挑战第二只,由于防御力已经大于其破防能力勇者不受伤害。接下来挑战第三只,勇者不受伤害,所以总伤害为1000。
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Test26 {
static class Node{
int a;
int b;
Node(int a,int b){
this.a = a;
this.b = b;
}
@Override
public String toString(){
return a+""+b;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int d = sc.nextInt();
int[] po = new int[n];
int[] shang = new int[n];
for (int i = 0; i < n; i++) {
po[i] = sc.nextInt();
}
for (int i = 0; i <n ; i++) {
shang[i] = sc.nextInt();
}
Node[] nodes = new Node[po.length];
for (int i = 0; i < po.length; i++) {
nodes[i] = new Node(po[i],shang[i]);
}
Node temp = nodes[0];
int poivot = d+po.length-1;
int i = 0, j = po.length-1;
while(i < j){
while(i < j && nodes[j].a <= poivot) {
--j;
}
nodes[i] = nodes[j];
while(i < j && nodes[i].a > poivot){
++i;
}
nodes[j] = nodes[i];
}
nodes[i] = temp;
int start = nodes.length;
for(int l = 0; l < nodes.length; ++l) {
if(nodes[l].a <= poivot) {
start = l;
}
}
Arrays.sort(nodes, new Comparator<Node>() {
@Override
public int compare(Node o1,Node o2){
if(o1.a == o2.a){
return o1.b - o2.b;
}
return o2.a - o1.a;
}
});
int sum = 0;
for(int l = 0; l < nodes.length; ++l) {
if(nodes[l].a > d+l) {
sum += nodes[l].b;
}
}
System.out.println(sum);
}
}
题目描述
现在假设一个城市有个人,有一个携带毒的人,在这个城市中一共发生了m起家庭聚会,我们假设这个携带病毒的人参加的家庭聚会中所有人都会被感染,被感染的人还会继续去感染其他,现在想知道,这m场聚会后,这个城市一共有多少人被感染(包括携带病毒的人)人的编号从0开始。
输入描述
对于每一组测试数据,第一行输入3个整数n,m,f,代表这个城市人的个数,发生的家庭聚会个数以及初始携带病毒的人的编号。
接下来输入m行,每一行先输入一个数q,代表这个家庭聚会的人数,接下来后面跟着q个数,代表参加人的编号。
2 <= n <= 10000
1 <= m <= 500
1 ≤q≤50
输入
10 2 0
2 0 3
3 0 1 2
输出
4
思路
把感染的加进队列,然后出队,再把出队的感染者参加的每个聚会的成员入队 ,用 contain判断这个聚会是不是有感染者,直到队空。然后统计所有感染的人 。
import java.util.HashSet;
import java.util.Scanner;
public class Test27 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n,m,f;
n = sc.nextInt();
m = sc.nextInt();
f = sc.nextInt();
HashSet<Integer> set = new HashSet<>();
set.add(f);
for (int i = 0; i < m; i++) {
int q = sc.nextInt();
int[] part = new int[q];
boolean flag = false;
for (int j = 0; j <q ; j++) {
part[j] = sc.nextInt();
if(set.contains(part[j])){
flag = true;
}
if(flag){
for (int k = 0; k < q; k++) {
set.add(part[k]);
}
}
}
}
System.out.println(set.size());
}
}
优质文章推荐
1.计算机网络----三次握手四次挥手
2.一篇让你彻底了解http请求报文和响应报文的结构
3.梦想成真-----项目自我介绍
4.一篇让你彻底了解HTTP 的前世今生
5.一篇让你彻底搞定HTTP方法与状态码
6.你们要的设计模式来了
7.震惊!来看《这份程序员面试手册》!!!
8.一字一句教你面试“个人简介”
9.接近30场面试分享