记录洛谷刷题QAQ
一、手机 题目描述
一般的手机的键盘是这样的:
要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
输入格式一行句子,只包含英文小写字母和空格,且不超过 200 个字符。
输出格式一行一个整数,表示按键盘的总次数。
样例 #1 样例输入 #1i have a dream样例输出 #1
23提示
NOI 导刊 2010 普及(10)
代码如下:#include二、【Mc生存】插火把 题目背景#include #define M 10001 #include int main(int argc, char *argv[]) { char NUM[201]; gets(NUM); int sum = 0; int len = strlen(NUM); for(int i = 0;i < len;i++){ if(NUM[i] == 'b'||NUM[i] == 'e'||NUM[i] == 'h'||NUM[i] == 'k'||NUM[i] == 'n'||NUM[i] == 'q'||NUM[i] == 'u'||NUM[i] == 'x') sum =sum + 2; else if(NUM[i] == 'a'||NUM[i] == 'd'||NUM[i] == 'g'||NUM[i] == 'j'||NUM[i] == 'm'||NUM[i] == 'p'||NUM[i] == 't'||NUM[i] == 'w'||NUM[i] == ' ') sum = sum + 1; else if(NUM[i] == 'c'||NUM[i] == 'f'||NUM[i] == 'i'||NUM[i] == 'l'||NUM[i] == 'o'||NUM[i] == 'r'||NUM[i] == 'v'||NUM[i] == 'y') sum =sum + 3; else if(NUM[i] == 's'||NUM[i] == 'z') sum = sum + 4; } printf("%dn",sum); return 0; }
初一党应该都知道…
题目描述话说有一天 linyorson 在“我的世界”开了一个 n × n n times n n×n 的方阵,现在他有 m m m 个火把和 k k k 个萤石,分别放在 ( x 1 , y 1 ) ∼ ( x m , y m ) (x_1, y_1) sim (x_m, y_m) (x1,y1)∼(xm,ym) 和 ( o 1 , p 1 ) ∼ ( o k , p k ) (o_1, p_1) sim (o_k, p_k) (o1,p1)∼(ok,pk) 的位置,没有光或没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?
P.S. 火把的照亮范围是:
|暗|暗| 光 |暗|暗|
|暗|光| 光 |光|暗|
|光|光|火把|光|光|
|暗|光| 光 |光|暗|
|暗|暗| 光 |暗|暗|
萤石:
|光|光| 光 |光|光|
|光|光| 光 |光|光|
|光|光|萤石|光|光|
|光|光| 光 |光|光|
|光|光| 光 |光|光|
输入格式
输入共
m
+
k
+
1
m + k + 1
m+k+1 行。
第一行为
n
,
m
,
k
n, m, k
n,m,k。
第
2
2
2 到第
m
+
1
m + 1
m+1 行分别是火把的位置
x
i
,
y
i
x_i, y_i
xi,yi。
第
m
+
2
m + 2
m+2 到第
m
+
k
+
1
m + k + 1
m+k+1 行分别是萤石的位置
o
i
,
p
i
o_i, p_i
oi,pi。
注:可能没有萤石,但一定有火把。
输出格式有几个点会生出怪物。
样例 #1 样例输入 #15 1 0 3 3样例输出 #1
12提示
数据保证, 1 ≤ n ≤ 100 1 le n le 100 1≤n≤100, 1 ≤ m + k ≤ 25 1 leq m+k leq 25 1≤m+k≤25, 1 ≤ m ≤ 25 1 leq m leq 25 1≤m≤25, 0 ≤ k ≤ 5 0 leq k leq 5 0≤k≤5。
代码如下:#include三、轰炸III 题目背景int n,m,k,x,y,i,j,u,v,ans;//n,m,k(题目),x,y(临时坐标),i,j,u,v(循环变量),ans(答案)。 int main(){ int ma[1000][1000];//自己试了几次,数据只有这么大…… scanf("%d %d %d", &n, &m, &k); for(i=1;i<=m;i++){//火把 scanf("%d %d", &x, &y); ma[x-2][y]=ma[x-1][y+1]=ma[x-1][y]=ma[x-1][y-1]=ma[x][y+2]=ma[x][y+1]=ma[x][y]=ma[x][y-1]=ma[x][y-2]=ma[x+1][y+1]=ma[x+1][y]=ma[x+1][y-1]=ma[x+2][y]=1;//要标记有光的。(慢慢打,有点麻烦。) } for(i=1;i<=k;i++){//萤石 scanf("%d %d", &x, &y); for(u=-2;u<=2;u++) for(v=-2;v<=2;v++) ma[x+u][y+v]=1;//萤石用循环标记,代码就短一些。 } for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(ma[i][j]==0) ans++; printf("%d", ans); return 0; }
一个大小为 n × m ntimes m n×m 的城市遭到了 x x x 次轰炸,每次都炸了一个每条边都与边界平行的矩形。
题目描述在轰炸后,有 y y y 个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮。
输入格式第一行共四个整数,分别为 n , m , x , y n,m,x,y n,m,x,y。
接下来 x x x 行,每行四个整数 x 1 , y 1 , x 2 , y 2 x_1,y_1,x_2,y_2 x1,y1,x2,y2,表示被轰炸的矩形的左上角坐标和右下角坐标(比如 1 , 3 , 7 , 10 1,3,7,10 1,3,7,10 就表示被轰炸的地方是从 ( 1 , 3 ) (1,3) (1,3) 到 ( 7 , 10 ) (7,10) (7,10) 的矩形)。
接下来 y y y 行,每行两个整数,表示这个关键点的坐标。
输出格式输出共 y y y 行,每行第一个字符为 Y 或 N,表示是否被轰炸;若为 Y,在一个空格后为两个整数,表示被炸了几次和最后一次是第几轮。
样例 #1 样例输入 #110 10 2 3 1 1 5 5 5 5 10 10 3 2 5 5 7 1样例输出 #1
Y 1 1 Y 2 2 N提示
对于 100 % 100% 100% 数据,满足 1 ≤ n , m ≤ 100 1le n,mle 100 1≤n,m≤100。
代码如下:#include四、三子棋I 题目描述#include int main(int argc, char *argv[]) { int N, M, x, y; while(scanf("%d%d%d%d",&N,&M,&x,&y)!=EOF){ int x1[x], y1[x], x2[x], y2[x]; for(int i = 1;i <= x;i++){ scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]); } int X[y], Y[y]; for(int i = 0;i < y;i++){ scanf("%d%d",&X[i],&Y[i]); } for(int j = 0;j < y;j++){ int point = 0, sum = 0; for(int i = 1;i <= x;i++){ if(X[j] >= x1[i] && X[j] <= x2[i] && Y[j] >= y1[i] && Y[j] <= y2[i]){ point = i; sum++; } } if(point != 0){ printf("Y"); printf(" %d %dn",sum,point); } else if(point == 0){ printf("Nn"); } } } return 0; }
小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了。
由于小a比较愚蠢,uim总是让他先。
我们用9个数字表示棋盘位置:
123
456
789
所有的棋谱都是已经结束的棋局,要么一方获胜,要么平局。
今天,他们下了一下午的棋,小a为了提高技术,录下了很多棋谱。他想知道,一盘棋结束时,到底是谁赢。
输入格式一行,一串数字,表示落子的地点。小a总是先下
输出格式一行,如果小a赢,输出“xiaoa wins.”。如果uim赢,输出“uim wins.”。如果平局,输出“drew.”
样例 #1 样例输入 #15237649样例输出 #1
xiaoa wins.样例 #2 样例输入 #2
539128647样例输出 #2
drew.代码如下:
#include五、好朋友 题目背景#include char s[10]; int main() { scanf("%s", s); int len = strlen(s); if(len < 9) { if(len % 2 == 1) printf("xiaoa wins."); else if(len % 2 == 0) printf("uim wins."); } else if(len == 9) { if(s[0] == 49 && s[1] == 50) printf("xiaoa wins."); else printf("drew."); } return 0; }
小可可和所有其他同学的手腕上都戴有一个射频识别序列号码牌,这样老师就可以方便的计算出他们的人数。很多同学都有一个“好朋友” 。如果 A A A 的序列号的约数之和恰好等于 B B B 的序列号,那么 A A A 的好朋友就是 B B B。在这里,一个数的约数不包括这个数本身。因为一些同学的号码约数和大于其他任何同学的号码,所以这些同学没有好朋友。一些同学有一个“非常好友” 。当两个同学互为“好朋友”时,他们就是一对“非常好友” 。注意在这道题中,忽略那些自己是自己的“非常好友”的情况。
题目描述给定一个序列号 s s s,找出序列号不小于 s s s 的第一对“非常好友” 。
输入格式只有一行一个整数 s s s,即给定的序列号下界。
输出格式输出一行两个用空格隔开的整数 a a a 和 b b b。
a
a
a 表示第一个序列号不小于
s
s
s 的有“非常好友”的同学,
b
b
b 是
a
a
a 的“非常好友” 。(注:允许
b
<
s
b
样例 #1
样例输入 #1
206
样例输出 #1
220 284
提示
数据规模与约定
代码如下:
#include



