记录洛谷刷题C语言qaq
[COCI2020-2021#6] Bold
题目描述
Paula 给 Daniel 写了一封信,她需要加粗文本的字体,以便视力恶化的 Daniel 阅读。
信可以用 .
和 #
组成的矩阵表示。对于所有信中原有的 #
,Paula 需要将其向右下方扩展为
2
×
2
2 \times 2
2×2 的 #
。
输入格式
第一行两个整数 n , m n, m n,m,表示信的尺寸。
接下来 n n n 行,每 m m m 个字符,表示信的内容。
保证最后一行与最后一列中没有 #
。
输出格式
n n n 行,每行 m m m 个字符,表示加粗后的信。
样例 #1
样例输入 #1
4 4
....
.#..
....
....
样例输出 #1
....
.##.
.##.
....
样例 #2
样例输入 #2
7 7
.......
.####..
.#...#.
.#...#.
.#...#.
.####..
.......
样例输出 #2
.......
.#####.
.######
.##..##
.##..##
.######
.#####.
样例 #3
样例输入 #3
9 7
.......
.####..
.#...#.
.#...#.
.####..
.#.....
.#.....
.#.....
.......
样例输出 #3
.......
.#####.
.######
.##..##
.######
.#####.
.##....
.##....
.##....
提示
数据规模与约定
对于
100
%
100\%
100% 的数据,
2
≤
n
,
m
≤
1
0
3
2 \le n, m \le 10^3
2≤n,m≤103。保证信中只包含 .
和 #
。
说明
本题分值按 COCI 原题设置,满分 50 50 50。
题目译自 COCI2020-2021 CONTEST #6 T1 Bold。
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int n,m;
char a[1001][1001];
int book[1001][1001]={0};
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("\n%c",&a[i][j]);
if(a[i][j]=='#') book[i][j]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(book[i][j]==1) a[i+1][j]=a[i][j+1]=a[i+1][j+1]='#';
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) printf("%c",a[i][j]);
printf("\n");
}
return 0;
}
「MCOI-05」饱食
题目背景
兔 21:33:19
改下题目背景啊
兔 21:33:21
要符合SHZY核心价值观!!1
一只书虫仔 21:33:35
改成随机抽 3 个兔兔吃掉!
题目描述
书虫背包里有 n n n 只兔兔,第 i i i 只兔兔被书虫编号为一个由大写字母组成的字符串 S i S_i Si。
书虫会 +C+,他用 +C+ 编写出了 random
函数,随机抽取出了三只兔兔。
不过书虫暂时得了神经性厌食症,书虫能吃下这三只兔兔当且仅当:
- 编号的首字母为
M
,C
,O
或I
中的任意一个。 - 编号的首字母不能相同。
书虫想问有多少种选择方案使得他能吃下他选的的三只兔兔?
输入格式
第一行一个整数 n n n 代表兔兔个数。
接下来 n n n 行每行一个字符串 S i S_i Si 代表一只兔兔。
输出格式
一行一个整数代表答案。
样例 #1
样例输入 #1
5
mine
CRAFT
OLYMPIAD
IN
informatICS
样例输出 #1
7
提示
样例 1 解释
有如下 7 7 7 种选择方式:
-
mine
,CRAFT
,OLYMPIAD
。 -
mine
,CRAFT
,IN
。 -
mine
,CRAFT
,informatICS
。 -
mine
,OLYMPIAD
,IN
。 -
mine
,OLYMPIAD
,informatICS
。 -
CRAFT
,OLYMPIAD
,IN
。 -
CRAFT
,OLYMPIAD
,informatICS
。
数据规模与约定
本题采用捆绑测试。
- Subtask 1(10 pts):
S
i
S_i
Si 首字母均为
M
。 - Subtask 2(30 pts): n ≤ 100 n \le 100 n≤100。
- Subtask 3(60 pts):无特殊限制。
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 5 1\le n\le10^5 1≤n≤105, 1 ≤ ∣ S i ∣ ≤ 11 1 \le |S_i| \le 11 1≤∣Si∣≤11, S i S_i Si 由大写字母组成。
数据不保证 S i S_i Si 互不相同。
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int n;
char s[17];
long long s1, s2, s3, s4;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++) {
scanf("%s", s + 1);
if (s[1] == 'M') s1 ++;
if (s[1] == 'C') s2 ++;
if (s[1] == 'O') s3 ++;
if (s[1] == 'I') s4 ++;
}
printf("%lld\n", s1 * s4 * (s2 + s3) + s2 * s3 * (s1 + s4));
return 0;
}
[COCI2012-2013#1] DOM
题目描述
给定一个仅包含大写字母的单词,删除该单词中的以下九个字母: C,A,M,B,R,I,D,G,E \texttt{C,A,M,B,R,I,D,G,E} C,A,M,B,R,I,D,G,E。
输入格式
一行一个字符串,表示给定的单词。
输出格式
样例 #1
样例输入 #1
lovA
样例输出 #1
lov
样例 #2
样例输入 #2
KARIJERA
样例输出 #2
KJ
提示
【数据范围】
对于 100 % 100\% 100% 的数据,保证 3 ≤ 3 \le 3≤ 单词长度 ≤ 100 \le 100 ≤100。
【说明】
本题分值按 COCI 原题设置,满分 50 50 50。
题目译自 COCI2012-2013 CONTEST #1 T1 DOM。
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
char s[1000];
scanf("%s",&s);
for(int i=0;i<=strlen(s);i++){
if(s[i]=='C' || s[i]=='A' || s[i]=='M' || s[i]=='B' || s[i]=='R' || s[i]=='I' || s[i]=='D' || s[i]=='G'|| s[i]=='E')
continue;
else
putchar(s[i]);
}
return 0;
}
「EZEC-8」凑数
题目描述
给定 1 1 1 到 n n n 这 n n n 个正整数,请问能否恰好选择 k k k 个数,使选中的数之和为 s s s(每个数只能用 1 1 1 次)。
输入格式
本题有多组数据。
第一行一个正整数 T T T,表示数据组数。
对于每组数据,一行 3 3 3 个正整数 n , k , s n,k,s n,k,s。
输出格式
对于每组数据:
输出一行,一个字符串,Yes
或 No
,表示是否可以恰好选择
k
k
k 个数,使选中的数之和为
s
s
s。
样例 #1
样例输入 #1
3
5 2 10
5 2 5
5 2 2
样例输出 #1
No
Yes
No
提示
本题采用捆绑测试。
- Subtask 1(15 points): n ≤ 5 n\le5 n≤5。
- Subtask 2(15 points): n ≤ 15 n\le15 n≤15。
- Subtask 3(20 points): n ≤ 100 n\le100 n≤100。
- Subtask 4(15 points): k = 1 k=1 k=1。
- Subtask 5(15 points): s ≤ 15 s\le15 s≤15。
- Subtask 6(20 points):无特殊限制。
对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 1 0 3 1\le T\le10^3 1≤T≤103, 1 ≤ k ≤ n ≤ 1 0 9 1\le k\le n\le10^9 1≤k≤n≤109, 1 ≤ s ≤ 1 0 18 1\le s\le10^{18} 1≤s≤1018。
代码如下:
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int T;
long long n,k,s,minSum,maxSum;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld",&n,&k,&s);
minSum=(k*k+k)/2;
maxSum=(-(k*k)+(2*n+1)*k)/2;
if(s>=minSum&&s<=maxSum)
{
puts("Yes");
}
else
{
puts("No");
}
}
return 0;
}