A. 得分计算1
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: scshuanghai | 是否specialjudge: False |
题目描述
OJ通常支持两种记分模式,其中一种为OI模式。该模式下,每题的得分由每个测试用例的分数决定。也就是说在这种模式下,每个测试用例都有一个分值,用户每过一个测试用例就得到相应的值。请你写一段程序来计算某一题在此模式下的得分。
输入:
第一行为一个整数n,代表测试用例组数,后边n行,每行均为两个用空格分隔的整数r和s,代表一组测试用例情况。其中s代表该组测试用例的分值,r代表结果。如果r为0,则代表该组测试用例没通过,为1则代表该组测试用例通过。
输出:只有一行,为该题的最终得分。
输入样例
3
1 50
0 100
1 100
输出样例
150
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
scanf("%d", &n);
int i;
int point = 0; //初始化分数为0
for (i = 0; i < n; i++)
{
int r, s;
scanf("%d %d", &r, &s); //输入r,s
if (r)
{
point = point + s; //计算分数
}
}
printf("%d", point);
return 0;
}
B. 罚时计算1
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: scshuanghai | 是否specialjudge: False |
题目描述
OJ通常支持两种记分模式,其中一种为ICPC模式。该模式下,每个通过的题目都有一个罚时,罚时的计算涉及到两个参数,一个是提交的时间,一个提交的次数。一个通过了的题目最终的罚时为: 提交的时间(指从比赛开始到该题通过的时间,以分钟为单位)加上 错误提交的次数乘以20 (也就是说每多提交一次,罚时增加20分钟)。未通过的题目计算罚时为:错误提交的次数乘以20。请你写一段程序来计算某次考试某同学的总罚时。
输入:
若干行,每行均为三个用空格分隔的整数n,t和r,代表一次提交的情况。其中n代表题号,t代表该题的提交时间。r代表结果。如果r为0,则代表该次提交没通过,为1则代表该次提交通过。如果n,t和r同时为0代表输入结束。(注:输入的顺序即为该同学的提交顺序,一个题目提交通过后,系统不会再记录该题目新的提交)
输出:
只有一行,为该同学的总罚时。
输入样例
1 10 1
2 25 1
3 40 0
3 65 0
0 0 0
输出样例
75
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, t, r;
scanf("%d %d %d", &n, &t, &r); //输入n,t,r
int point = 0;
while (n != 0 || t != 0 || r != 0) //判断是否结束
{
if (r) //通过
{
point = point + t;
}
else //不通过
{
point += 20;
}
scanf("%d %d %d", &n, &t, &r);
}
printf("%d", point); //输出
return 0;
}
C. 卫星图片1
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: scshuanghai | 是否specialjudge: False |
题目描述
一张卫星照片可看作是由多个小方格组合而成的矩阵,每个小方格叫做一个像素点。每个像素点对应一个灰度值(整数)。某张卫星照片中如果某个像素点的值比它周边所有的像素点的值(最多有8个,最少有3个)都大50或50以上,我们就认为该点为敌人的据点。现给定一张照片,请你写一段程序找出照片中所有的据点。
输入:
照片虽然是个二维矩阵,但在磁盘上,为了算法的方便通常以“一维”的形式存储在文件中。所以输入包括两行,第一行为2个整数m, n(2<=m, n<=100),分别代表像素矩阵的行数和列数。后边是一个m X n的矩阵,代表各个像素点的灰度值。
输出:
据点的个数。
输入样例
3 3
100 100 100 150 100 100 100 100 150
输出样例
2
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cul(int m, int n);
int main()
{
int m, n;
scanf("%d %d", &m, &n); //输入地图大小
printf("%d", cul(m, n));
return 0;
}
int cul(int m, int n)
{
int map[100][100];
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &map[i][j]); //输入地图
}
}
int a, b;
int num = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++) //对地图每一个点遍历
{
int flag = 1;
for (a = -1; a <= 1 && flag == 1; a++)
{
for (b = -1; b <= 1 && flag == 1; b++) //对前后左右遍历
{
if (i + a >= 0 && i + a < m && j + b >= 0 && j + b <n && !(a == 0 && b == 0))
{
if (map[i][j] < map[i + a][j + b] + 50) //判断据点
{
flag = 0;
}
}
}
}
if (flag)
{
num++;
}
}
}
return num; //返回值
}
D. 电商1
运行时间限制: 1000 | 运行内存限制: 4096 |
作者: scshuanghai | 是否specialjudge: False |
题目描述
某电商网站产品的验证码由字母和数字组成。现在需要按照验证码的数字组合进行排序,请你写一段依据此规则的排序程序。
验证码解释:
Abc12De3的数字组合为123
4f5xy6B的数字组合为456
Th99eKing的数字组合为99
以上三个验证码,如果按照数字组合降序排列为:
4f5xy6B
Abc12De3
Th99eAing
输入:第一行为一个正整数n(0<n<10000)。后边是n行,每行一个字符串,代表产品验证码,每个字符串中仅包含字母和数字,且长度小于1000。
注:假定所有验证码的数字组合不存在重复情况。
输出:
共n行,每行为一个字符串,为排序后的验证码(按照数字组合降序排列)。
注意:此题内存有限制!
输入样例
3
Abc12De3
4f5xy6B
Th99eKing
输出样例
4f5xy6B
Abc12De3
Th99eAing
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(int n);
int main()
{
int n;
scanf("%d", &n); //输入个数
sort(n);
return 0;
}
void sort(int n)
{
char **codes = (char**)malloc(sizeof(char*) * n); //创建一个指针数组
int *num = (int*)malloc(sizeof(int) * n); //用于储存数字组合
int i, j;
for (i = 0; i < n; i++)
{
codes[i] = (char*)malloc(sizeof(char) * 1010); //创建一个字符串
scanf("%s", codes[i]);
num[i] = 0;
for (j = 0; codes[i][j] != '\0'; j++)
{
if (codes[i][j] >= '0' && codes[i][j] <= '9')
{
num[i] = num[i] * 10;
num[i] = num[i] + codes[i][j] - '0'; //计算数字组合
}
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++) //排序
{
if (num[j] < num[j + 1])
{
int tmp;
char temp[1010];
tmp = num[j];
num[j] = num[j + 1];
num[j + 1] = tmp;
strcpy(temp, codes[j]);
strcpy(codes[j], codes[j + 1]);
strcpy(codes[j + 1], temp);
}
}
}
for (i = 0; i < n; i++) //输出排序后
{
puts(codes[i]);
}
return 0;
}
E. 活跃用户统计
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: scshuanghai | 是否specialjudge: False |
题目描述
某网站当天日志文件由5个字段组成,以空格分隔,格式为:“时 分 秒 用户名 操作”,其中“时分秒”均为整数,“用户名”为小写字符串,“操作”为“LOGIN”和”LOGOUT”两个大写字符串。举例如下:
11 23 59 tom LOGIN
12 24 39 tom LOGOUT
请统计当天用户登录次数排名(从大到小)。
输入:第一行为一个整数n,代表记录总数,后边n行,每行均符合以上日志记录格式。
输出:按用户登录次数“从大到小”排名的记录,共m行,每行格式为 “用户名 登录次数 最后一次登录时间(时 分 秒)”。如果两个用户登录次数一样,则用户名字符串小的排前面。
输入样例
8
8 10 11 tom LOGIN
9 11 23 jerry LOGIN
10 10 38 tom LOGOUT
12 10 14 micky LOGIN
13 2 15 micky LOGOUT
14 0 1 jerry LOGOUT
20 24 39 tom LOGIN
22 33 15 tom LOGOUT
输出样例
tom 2 20 24 39
jerry 1 9 11 23
micky 1 12 10 14
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void count(int n);
struct users //定义结构体
{
int times;
int hour;
int min;
int second;
char name[50];
};
int main()
{
int n;
scanf("%d", &n); //输入日志数量
count(n); //计算
return 0;
}
void count(int n)
{
char **names = (char**)malloc(sizeof(char*) * n); //名字数组
struct users *user = (struct users*)malloc(sizeof(struct users) * n); //结构体数组
int i, j, used = 0;
for (i = 0; i < n; i++)
{
names[i] = (char*)malloc(sizeof(char) * 50); //名字
}
int h, m, s;
char name[50], state[10];
for (i = 0; i < n; i++)
{
scanf("%d %d %d %s %s", &h, &m, &s, name, state); //输入日志
if (strcmp(state, "LOGIN") == 0)
{
int existed = 0, place;
for (j = 0; j < n; j++) //是否有用户名
{
if (strcmp(names[j], name) == 0)
{
existed = 1;
place = j;
}
}
if (existed) //有
{
user[place].times = user[place].times + 1;
user[place].hour = h;
user[place].min = m;
user[place].second = s;
}
else //无
{
user[used].times = 1;
user[used].hour = h;
user[used].min = m;
user[used].second = s;
strcpy(user[used].name, name);
strcpy(names[used], name);
used++;
}
}
}
for (i = 0; i < used; i++)
{
for (j = 0; j < used - i - 1; j++) //名字排序
{
if (strcmp(user[j].name, user[j + 1].name) > 0)
{
struct users tmp;
tmp = user[j];
user[j] = user[j + 1];
user[j + 1] = tmp;
}
}
}
for (i = 0; i < used; i++)
{
for (j = 0; j < used - i - 1; j++) //登陆次数排序
{
if (user[j].times < user[j + 1].times)
{
struct users tmp;
tmp = user[j];
user[j] = user[j + 1];
user[j + 1] = tmp;
}
}
}
for (i = 0; i < used; i++) //输出
{
printf("%s %d %d %d %d\n", user[i].name, user[i].times, user[i].hour, user[i].min, user[i].second);
}
}