记录洛谷刷题QAQ
一、[COCI2016-2017#1] Tarifa
题目描述
为了能够在网上冲浪,Pero 购买了一个数据套餐:
- 每月他将获得 x M B x \rm{MB} xMB 流量。
- 每月未用完的流量,可以在次月继续使用。
现在,我们知道了 Pero 在使用这个套餐的前 n n n 个月中,每月使用了多少 M B \rm{MB} MB 流量。请你帮忙计算,第 n + 1 n+1 n+1 月他能使用多少 M B \rm{MB} MB 流量。
输入格式
第一行一个整数 x x x。
第二行一个整数 n n n。
接下来 n n n 行,每行一个整数 p i p_i pi,表示第 i i i 月 Pero 使用了多少 M B \rm{MB} MB 流量。
输出格式
一行,一个整数,表示第 n + 1 n+1 n+1 月 Pero 能使用多少 M B \rm{MB} MB 流量。
样例 #1
样例输入 #1
10
3
4
6
2
样例输出 #1
28
样例 #2
样例输入 #2
10
3
10
2
12
样例输出 #2
16
样例 #3
样例输入 #3
15
3
15
10
20
样例输出 #3
15
提示
样例 1 解释
第一月,Pero 能使用 10 M B 10\rm{MB} 10MB 流量,实际使用 4 M B 4\rm{MB} 4MB 流量,剩余 6 M B 6\rm{MB} 6MB 流量。
第二月,Pero 能使用 6 + 10 = 16 ( M B ) 6+10=16(\rm{MB}) 6+10=16(MB) 流量,实际使用 6 M B 6\rm{MB} 6MB 流量,剩余 10 M B 10\rm{MB} 10MB 流量。
第三月,Pero 能使用 10 + 10 = 20 ( M B ) 10+10=20(\rm{MB}) 10+10=20(MB) 流量,实际使用 2 M B 2\rm{MB} 2MB 流量,剩余 18 M B 18\rm{MB} 18MB 流量。
第四月,Pero 能使用 18 + 10 = 28 ( M B ) 18+10=28(\rm{MB)} 18+10=28(MB) 流量。
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 1 ≤ x ≤ 100 1\le x\le 100 1≤x≤100, 1 ≤ n ≤ 100 1\le n\le 100 1≤n≤100, 0 ≤ p i ≤ 1 0 4 0\le p_i\le 10^4 0≤pi≤104。
说明
题目译自 COCI2016-2017 CONTEST #1 T1 Tarifa。
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int x, n;
scanf("%d",&x);
scanf("%d",&n);
int sum = 0;
for(int i = 1;i <= n;i++)
{
int m;
scanf("%d",&m);
sum = sum + x - m;
}
printf("%d\n",sum+x);
return 0;
}
二、[COCI2006-2007#4] SIBICE
题目背景
年轻的 Mirko 把火柴扔的到处都是。他的母亲希望他将火柴放入盒子中。
题目描述
Mirko 现在要放置 n n n 根火柴,他有一个 w × h w\times h w×h 的矩形盒子。
他现在想请你进行判断这 n n n 根火柴每一个是否能够放入这个盒子。
我们可以把盒子看成一个平面,只需要判断火柴是否能够在这个平面内放下即可。
输入格式
输入第一行为三个整数 n , w , h n,w,h n,w,h。
接下来的 n n n 行,每行一个 [ 1 , 1000 ] [1,1000] [1,1000] 区间内的整数,表示一根火柴的长度。
输出格式
输出共
n
n
n 行,对于每根火柴,输出 DA
表示能放下,否则输出 NE
表示放不下。
样例 #1
样例输入 #1
5 3 4
3
4
5
6
7
样例输出 #1
DA
DA
DA
NE
NE
样例 #2
样例输入 #2
2 12 17
21
20
样例输出 #2
NE
DA
提示
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 50 1\le n\le 50 1≤n≤50, 1 ≤ w , h ≤ 100 1\le w,h\le 100 1≤w,h≤100。
说明
题目译自 COCI2006-2007 CONTEST #4 T1 SIBICE
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
for(int i= 1;i <= n;i++)
{
int m;
scanf("%d",&m);
double max = sqrt(x*x+y*y);
if(m<=max)
{
printf("DA\n");
}
else
{
printf("NE\n");
}
}
}
三、[COCI2006-2007#4] SKENER
题目背景
Mirko 在拿放大镜看杂志。
题目描述
他正在看一面 r r r 行 c c c 列的杂志。放大镜有两个参数 z r , z c zr,zc zr,zc,表示把每个字符都转换成一个 z r zr zr 行 z c zc zc 列的矩阵。
给出原始杂志,请你帮他找出杂志在放大镜下的影像。
输入格式
输入第一行四个整数 r , c , z r , z c r,c,zr,zc r,c,zr,zc。
接下来的
r
r
r 行,每行
c
c
c 个字符。字符可能为数字,字母或 .
。
输出格式
输出一个 r × z r r\times zr r×zr 行, c × z c c\times zc c×zc 列的矩阵,表示放大镜下的影像。
样例 #1
样例输入 #1
3 3 1 2
.x.
x.x
.x.
样例输出 #1
..xx..
xx..xx
..xx..
样例 #2
样例输入 #2
3 3 2 1
.x.
x.x
.x.
样例输出 #2
.x.
.x.
x.x
x.x
.x.
.x.
提示
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 1 ≤ r , c ≤ 50 1\le r,c\le 50 1≤r,c≤50, 1 ≤ z r , z c ≤ 5 1\le zr,zc\le 5 1≤zr,zc≤5。
说明
题目译自 COCI2006-2007 CONTEST #4 T2 SKENER
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int x,y, n, m;
scanf("%d%d%d%d",&x,&y,&n,&m);
char num[x][y];
for(int i = 0;i < x;i++)
{
scanf("%s",&num[i]);
}
for(int i=0;i<x;i++){//四重循环
//这里控制原行数
for(int t=0;t<n;t++){
//枚举放大后的行数
for(int j=0;j<y;j++){
//这里控制原列数
for(int l=0;l<m;l++)//枚举放大后的列数
printf("%c",num[i][j]);//输出 (快捷)
}
printf("\n");//换行位置很重要 (在这一行所有列的字符输完 后再换行)
}
}
return 0;
}
四、[COCI2007-2008#1] CETVRTA
题目描述
给出坐标系中一个矩形的三个顶点的坐标,请你确定第四个顶点的坐标并输出。
保证矩形的边与坐标轴平行。
输入格式
共 3 3 3 行,每行两个 1 ∼ 1000 1\sim 1000 1∼1000 之间的整数(含端点),表示这个矩形一个顶点的坐标。
输出格式
输出一行两个整数,表示第四个顶点的坐标。
样例 #1
样例输入 #1
5 5
5 7
7 5
样例输出 #1
7 7
样例 #2
样例输入 #2
30 20
10 10
10 20
样例输出 #2
30 10
提示
说明
题目译自 COCI2007-2008 CONTEST #1 T1 CETVRTA
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int max(int n,int m)
{
if(n>m) return n;
else return m;
}
int min(int n,int m)
{
if(n< m)
return n;
else
return m;
}
int main(){
long long n1,n2,n3,m1,m2,m3;
scanf("%lld%lld%lld%lld%lld%lld",&n1,&m1,&n2,&m2,&n3,&m3);
printf("%lld %lld",n1+n2+n3-(n1+n2+n3-max(n1,max(n2,n3))-min(n1,min(n2,n3)))*2,m1+m2+m3-(m1+m2+m3-max(m1,max(m2,m3))-min(m1,min(m2,m3)))*2);
return 0;
}
五、[COCI2007-2008#2] BIJELE
题目背景
Mirko 在阁楼发现了一套残缺的棋子。
题目描述
对于一套正确的棋子,应该包含:
- 一个国王;
- 一个皇后;
- 两个车;
- 两个象;
- 两个马;
- 八个兵。
现在给出这套残缺的棋子中每种棋子分别有多少个,请你求出需要如何添加或删除棋子来凑出完整的棋盘。
输入格式
输入一行六个数,依次表示国王,皇后,车,象,马,兵的数量。这些数字都在 0 ∼ 10 0\sim 10 0∼10 之间(包含端点)。
输出格式
输出一行六个数,依次表示国王,皇后,车,象,马,兵需要添加或删除的数量。用正数来表示添加,用负数来表示删除。
样例 #1
样例输入 #1
0 1 2 2 2 7
样例输出 #1
1 0 0 0 0 1
样例 #2
样例输入 #2
2 1 2 1 2 1
样例输出 #2
-1 0 0 1 0 7
提示
说明
题目译自 COCI2007-2008 CONTEST #2 T1 BIJELE。
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int a, b, c, d, e, f;
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
printf("%d %d %d %d %d %d\n",1 - a,1 - b, 2 - c, 2 - d, 2- e,8 - f);
return 0;
}