记录洛谷刷题QAQ
一、梦中的统计
题目背景
Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。
题目描述
Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码( 0 … 9 0 \ldots 9 0…9):每一个数码在计数的过程中出现过多少次?
给出两个整数 M M M 和 N N N,求每一个数码出现了多少次。
输入格式
第 1 1 1 行: 两个用空格分开的整数 M M M 和 N N N。
输出格式
第 1 1 1 行: 十个用空格分开的整数,分别表示数码 0 … 9 0 \ldots 9 0…9 在序列中出现的次数。
样例 #1
样例输入 #1
129 137
样例输出 #1
1 10 2 9 1 1 1 1 0 1
提示
数据保证, 1 ≤ M ≤ N ≤ 2 × 1 0 9 1 \leq M \leq N \leq 2 \times 10^9 1≤M≤N≤2×109, N − M ≤ 5 × 1 0 5 N-M \leq 5 \times 10^5 N−M≤5×105。
代码如下:
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main(){
int i,n1,n2,b;
int a[10]={0};
scanf("%d %d",&n1,&n2);
for(i=n1;i<=n2;i++){
int num=i;
while(num>0){
b=num%10;
num=num/10;
a[b]++;
}
}
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}
二、统计天数
题目描述
炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续 N ( 1 ≤ N ≤ 1 0 6 ) N(1 \leq N \leq 10^6) N(1≤N≤106) 的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入格式
第 1 行:一个整数 N N N 。 1 ≤ N ≤ 1 0 6 1 \leq N \leq 10^6 1≤N≤106
第 2 行: N N N个空格隔开的整数,表示连续 N N N 天的最高气温。 0 ≤ 0 \leq 0≤ 最高气温 ≤ 1 0 9 \leq 10^9 ≤109 。
输出格式
1 行:一个整数,表示最高气温一直上升的最长连续天数。
样例 #1
样例输入 #1
10
1 2 3 2 4 5 6 8 5 9
样例输出 #1
5
代码如下:
#include<stdio.h>
int main(){
int n,i,sum=1,count=1;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
if(a[i+1]>a[i])
{
count++; //count记录每次最长的温度升高
if(count>sum) //sum为最大的
sum=count;
}
else
count=1;
}
printf("%d",sum);
return 0;
}
三、语句解析
题目背景
木有背景……
题目描述
一串长度不超过
255
255
255 的 PASCAL 语言代码,只有
a
,
b
,
c
a,b,c
a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];
。未赋值的变量值为
0
0
0 输出
a
,
b
,
c
a,b,c
a,b,c 的值。
输入格式
一串符合语法的 PASCAL 语言,只有 a , b , c a,b,c a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 0 0 0。
输出格式
输出 a , b , c a,b,c a,b,c 最终的值。
样例 #1
样例输入 #1
a:=3;b:=4;c:=5;
样例输出 #1
3 4 5
提示
输入的 PASCAL 语言长度不超过 255 255 255。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a = 0, b = 0, c = 0;
char s[300];
scanf("%s", s);
int len = strlen(s);
for(int i = 0; i < len; i+=5)
{
if(s[i] == 'a')
{
if(s[i+3] == 'a')
a = a;
else if(s[i+3] == 'b')
a = b;
else if(s[i+3] == 'c')
a = c;
else
a = s[i+3] - '0';
}
if(s[i] == 'b')
{
if(s[i+3] == 'a')
b = a;
else if(s[i+3] == 'b')
b = b;
else if(s[i+3] == 'c')
b = c;
else
b = s[i+3] - '0';
}
if(s[i] == 'c')
{
if(s[i+3] == 'a')
c = a;
else if(s[i+3] == 'b')
c = b;
else if(s[i+3] == 'c')
c = c;
else
c = s[i+3] - '0';
}
}
printf("%d %d %d\n", a, b, c);
return 0;
}
四、爱与愁的心痛
题目背景
(本道题目隐藏了两首歌名,找找看哪~~~)
《爱与愁的故事第一弹·heartache》第一章。
《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大神心痛啊~~~而且最近还有一些令人伤心的事情,都让人心痛(最近真的很烦哈)……
题目描述
最近有 n n n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m m m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。
输入格式
第一行有两个用空格隔开的整数,分别代表 n n n 和 m m m。
第 2 2 2 到第 ( n + 1 ) (n + 1) (n+1) 行,每行一个整数,第 ( i + 1 ) (i + 1) (i+1) 行的整数 a i a_i ai 代表第 i i i 件事的刺痛值 a i a_i ai。
输出格式
输出一行一个整数,表示连续 m m m 个刺痛值的和的最小值是多少。
样例 #1
样例输入 #1
8 3
1
4
7
3
1
2
4
3
样例输出 #1
6
提示
数据规模与约定
- 对于 30 % 30\% 30% 的数据,保证 n ≤ 20 n \leq 20 n≤20。
- 对于 60 % 60\% 60% 的数据,保证 n ≤ 100 n \leq 100 n≤100。
- 对于 90 % 90\% 90% 的数据,保证 n ≤ 1 0 3 n \leq 10^3 n≤103。
- 对于 100 % 100\% 100% 的数据,保证 0 ≤ m ≤ n ≤ 3 × 1 0 3 0 \leq m \leq n \leq 3 \times 10^3 0≤m≤n≤3×103, 1 ≤ a i ≤ 100 1 \leq a_i \leq 100 1≤ai≤100。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define M 300000
int main(int argc, char *argv[]) {
int n, m;
scanf("%d%d",&n,&m);
int NUM[M];
int i, j;
for(i = 0;i < n;i++){
scanf("%d",&NUM[i]);
}
long long int sum = 0, all = 1000000;
for(i = 0;i < n-m+1;i++){
for(j = i;j < m+i;j++){
sum = NUM[j] + sum;
}
if(sum < all){
all = sum;
}
sum = 0;
}
printf("%lld",all);
return 0;
}
五、西游记公司
题目背景
一道极其无厘头的题目
题目描述
事情是这样的:西游记中的孙沙猪(孙杀猪)三徒弟在西天取经之后开始进入厦门大学经贸系学习经济,在1个小时的学习后,他们用暴力手段毕业了。然后,他们创办了三个公司——“花果山生态旅游山庄集团公司”“高老庄猪肉美食城有限公司”“流沙河轮渡有限公司”。虽然这三家公司出自“经卷出版社”社长唐三藏的徒弟们,但是仍然保持着0元以下的财政收入。于是,他们想到了一个无聊的方法——向别人偷!是这样的:如果猪八戒知道孙悟空要偷猪八戒的平底锅,猪八戒就不能去抢沙和尚的保时捷。现在,作为猪八戒手下首席智士(智障人士)的你,要帮助既聪明又愚蠢的猪八戒用那种不正当的手段挽救这个公司!你可以这样做:你已经知道孙悟空什么时候要来偷猪八戒的东西,而猪八戒又要在什么时间去抢沙和尚的东西,又知道猪八戒每秒钟可以偷沙和尚1台笔记本电脑,帮猪八戒算一算,自己在有限的时间内能偷到沙和尚多少台电脑,使得他有足够的时间来防御大师兄。
输入格式
第一行:时:分:秒(表示猪八戒打算去偷沙和尚笔记本电脑的时间)
第二行:时:分:秒(表示孙悟空打算去偷猪八戒平底锅的时间)
注:时间可能有前导0,也有可能没有。
第三行:猪八戒每秒可以偷沙和尚几台笔记本电脑
确保第一行的时间要比第二行的时间来得早。
输出格式
一个整数,有可能大于int(2^31-2),表示猪八戒能偷沙和尚笔记本的个数
样例 #1
样例输入 #1
00:0:00
0:00:10
10
样例输出 #1
100
提示
数据范围:
00:00:00到23:59:59
数量<=32767
代码如下:
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main(){
int a1, a2, a3;
int b1, b2, b3;
int n;
scanf("%d:%d:%d",&a1,&a2,&a3);
scanf("%d:%d:%d",&b1,&b2,&b3);
scanf("%d",&n);
long long num = 0;
num = b1*3600+b2*60+b3 - a1*3600 - a2*60 - a3;
num = num*n;
printf("%lld\n",num);
return 0;
}