田地丈量

内存限制:512MB

时间限制:1s

提交:2946

解决:1221

题目描述

西西艾弗岛上散落着 nn 块田地。每块田地可视为平面直角坐标系下的一块矩形区域,由左下角坐标 (x1,y1)(x1,y1) 和右上角坐标 (x2,y2)(x2,y2) 唯一确定,且满足 x1<x2x1<x2、y1<y2y1<y2。这 nn 块田地中,任意两块的交集面积均为 00,仅边界处可能有所重叠。

最近,顿顿想要在南山脚下开垦出一块面积为 a×ba×b 矩形田地,其左下角坐标为 (0,0)(0,0)、右上角坐标为 (a,b)(a,b)。试计算顿顿选定区域内已经存在的田地面积。

输入

从标准输入读入数据。

输入共 n+1n+1 行。

输入的第一行包含空格分隔的三个正整数 nn、aa 和 bb,分别表示西西艾弗岛上田地块数和顿顿选定区域的右上角坐标。

接下来 nn 行,每行包含空格分隔的四个整数 x1x1、y1y1、x2x2 和 y2y2,表示一块田地的位置。

输出

输出到标准输出。

输出一个整数,表示顿顿选定区域内的田地面积。

样例输入

4 10 10
0 0 5 5
5 -2 15 3
8 8 15 15
-2 10 3 15

样例输出

44

提示

如图所示,选定区域内田地(绿色区域)面积为 4444。
img

子任务

全部的测试数据满足 n≤100n≤100,且所有输入坐标的绝对值均不超过 104104。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;

class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n= sc.nextInt();
int a= sc.nextInt();
int b= sc.nextInt();
int s=0;
int arr[][]=new int[n][4];
//arr[i][0] x1
//arr[i][1] y1
//arr[i][2] x2
//arr[i][3] y2
for (int i = 0; i < n; i++) {
for (int j = 0; j < 4; j++) {
arr[i][j]= sc.nextInt();
}
}
for (int i = 0; i < n; i++) {
arr[i][0]=Math.max(arr[i][0],0);
arr[i][1]=Math.max(arr[i][1],0);
arr[i][2]=Math.min(arr[i][2],a);
arr[i][3]=Math.min(arr[i][3],b);
s+=(arr[i][3]-arr[i][1])*(arr[i][2]-arr[i][0]);
}
System.out.println(s);
}
}

垦田计划

内存限制:512MB

时间限制:1s

提交:2046

解决:459

题目描述

顿顿总共选中了 nn 块区域准备开垦田地,由于各块区域大小不一,开垦所需时间也不尽相同。据估算,其中第 ii 块(1≤i≤n1≤in)区域的开垦耗时为 tit**i 天。这 nn 块区域可以同时开垦,所以总耗时 tTotaltTota**l 取决于耗时最长的区域,即:tTotal=max⁡{t1,t2,⋯ ,tn}tTota**l=max{t1,t2,⋯,t**n}

为了加快开垦进度,顿顿准备在部分区域投入额外资源来缩短开垦时间。具体来说:

  • 在第 ii 块区域每投入 cic**i 单位资源,便可将其开垦耗时缩短 11 天;
  • 耗时缩短天数以整数记,即第 ii 块区域投入资源数量必须是 cic**i 的整数倍;
  • 在第 ii 块区域最多可投入 ci×(ti−k)c**i×(t**ik) 单位资源,将其开垦耗时缩短为 kk 天;
  • 这里的 kk 表示开垦一块区域的最少天数,满足 0<k≤min⁡{t1,t2,⋯ ,tn}0<k≤min{t1,t2,⋯,t**n};换言之,如果无限制地投入资源,所有区域都可以用 kk 天完成开垦。

现在顿顿手中共有 mm 单位资源可供使用,试计算开垦 nn 块区域最少需要多少天?

输入

从标准输入读入数据。

输入共 n+1n+1 行。

输入的第一行包含空格分隔的三个正整数 nn、mm 和 kk,分别表示待开垦的区域总数、顿顿手上的资源数量和每块区域的最少开垦天数。

接下来 nn 行,每行包含空格分隔的两个正整数 tit**i 和 cic**i,分别表示第 ii 块区域开垦耗时和将耗时缩短 11 天所需资源数量。

输出

输出到标准输出。

输出一个整数,表示开垦 nn 块区域的最少耗时。

样例输入1

4 9 2
6 1
5 1
6 2
7 1

样例输出1

5

样例输入2

4 30 2
6 1
5 1
6 2
7 1

样例输出2

2

提示

样例1解释
如下表所示,投入 55 单位资源即可将总耗时缩短至 55 天。此时顿顿手中还剩余 44 单位资源,但无论如何安排,也无法使总耗时进一步缩短。

i 基础耗时tit**i 缩减1天所需资源cic**i 投入实际资源数量 实际耗时
1 6 1 1 5
2 5 1 0 5
3 6 2 2 5
4 7 1 2 5

样例2解释
投入 2020 单位资源,恰好可将所有区域开垦耗时均缩短为 k=2k=2 天;受限于 kk,剩余的 1010 单位资源无法使耗时进一步缩短。

子任务

70%70% 的测试数据满足:0<n,ti,ci≤1000<n,t**i,c**i≤100 且 0<m≤1060<m≤106;

全部的测试数据满足:0<n,ti,ci≤1050<n,t**i,c**i≤105 且 0<m≤1090<m≤109。

1

区间最大值

内存限制:256MB

时间限制:1s

提交:203

解决:9

题目描述

给定一个nn个整数的序列AA,再给定数kk, 求长度为kk的连续子序列中出现次数为 11 的数中最大的是多少,如果没有符合要求的数,输出−1−1。
很明显长度为nn个数的序列的长度为kk的连续子序列有 n−k+1nk+1个。

输入

第一行输入两个整数nn和kk
第二行输入nn个数,代表序列AA
其中: 1 ≤ nn ≤ 100000 , 1 ≤ kk ≤ nn , 1 ≤ Ai≤109A**i​≤109

输出

输出 n−k+1nk+1 个数,以空格隔开;
第一个数代表[1,k][1,k]这个连续子序列中出现次数为 11 的数中最大的。
第二个数代表[2,k+1][2,k+1]这个连续子序列中出现次数为 11 的数中最大的。
以此类推……

样例输入

5 3
1 4 4 3 3

样例输出

1 3 4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.*;

class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n= sc.nextInt();
int k= sc.nextInt();
int arr[]=new int[n];
for (int i = 0; i < n; i++) {
arr[i]=sc.nextInt();
}
//输入完成
if (n <= 0 || k <= 0 || k > n) {
System.out.println(-1);
return;
}
//1 4 4 3 3
Set<Integer> set1=new HashSet<>();//去重存放
Set<Integer> set2=new HashSet<>();//重复元素存放区
int max;
for (int i = 0; i < n-k+1; i++) {
for (int j = i; j < i+k; j++) {
//把出现过1次以上的都去掉,剩下的元素比,选出最大的
if (!set1.contains(arr[j])){
set1.add(arr[j]);
}else {
set2.add(arr[j]);
}
}
set1.removeAll(set2);//set1-set2为仅出现一次元素集
if (set1==null){
System.out.println(-1);
}
else {
max=Integer.MIN_VALUE;
for (int s:set1) {
max=Math.max(max,s);
}
System.out.println(max);
}
set1.clear();
set2.clear();
}
}
}//超时只有50分

构造原理

内存限制:128MB

时间限制:1s

提交:61

解决:8

题目描述

原子核外电子可分为不同能层,能层可直接用数字1,2,31,2,3等表示。同一能层的电子又由于所含能量不同可分为不同能级,能级为s,p,d,fs,p,d,f。能级ss最多能容纳 22 个电子,pp 最多可容纳 66 个,dd 最多可容纳 1010 个,ff 最多可容纳 1414 个。第 11 层的 ss 能级就写成 1s1s,第 ii 个能层的能级数最多为 ii 个。
核外电子不一定是按从小数到大数,从 ss 到 ff 的顺序排布的。有构造原理来显示真实的排布顺序(见图)
img
现在,如果核外电子完全按照构造原理排布,输入给出核外电子数,请列出核外电子排布状况。

输入

正整数nn表示核外电子数。

输出

总共有电子能排布的能层数行。
第 ii 行按照能量从小到大顺序输出能层 ii 的每个有电子的能级及能级的电子数目,用空格隔开。

样例输入

19

样例输出

1s2
2s2 2p6
3s2 3p6
4s1

提示

数据范围

保证最多用到能级 ff , n≤120n≤120。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.util.*;

class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[][]=new int[7][7];
int sum=0;
int c=0;
int flag=0;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
if (j==0) arr[i][j]=2;
if (j==1) arr[i][j]=6;
if (j==2) arr[i][j]=10;
if (j==3) arr[i][j]=14;
}
}
for (int i = 0; i < 7; i++) {//:/
// arr[0][0] :0+0=0
// arr[0][1] arr[1][0] :0+1=1
// arr[0][2] arr[1][1] arr[0][2] :2
// 03 12 21 30
for (int j = 0; j <= i; j++) {
//排布规律 1s=arr[j][i-j]=arr[0][0]
//第一列i-j:2
//第二列i-j:6
//第三列:10
//四:14电子
if (j>=i-j){
sum+=arr[j][i-j];
if (sum<=n){
System.out.print(j+1);
if (i-j==0) System.out.print("s");
if (i-j==1) System.out.print("p");
if (i-j==2) System.out.print("d");
if (i-j==3) System.out.print("f");
if (i-j==0) System.out.print("2 ");
if (i-j==1) System.out.print("6 ");
if (i-j==2) System.out.print("10 ");
if (i-j==3) System.out.print("14 ");
c=sum;
//换行处理
if ((j==i-j&&i%2==0)||(j==i-j+1&&i%2==1)){
System.out.println();
}
}
if (sum==n){
flag=1;
break;
}
if (sum>n){
System.out.print(j+1);
if (i-j==0) System.out.print("s");
if (i-j==1) System.out.print("p");
if (i-j==2) System.out.print("d");
if (i-j==3) System.out.print("f");
System.out.print(n-c+" ");
//换行处理
if ((j==i-j&&i%2==0)||(j==i-j+1&&i%2==1)){
System.out.println();
}
flag=1;
break;
}
}
}
if (flag==1) break;
}
}
}//完美(被高中化学知识攻击)

来不及了,只看了三道简单的,随缘吧。