• 洛谷刷题C语言:ZAMKA、Number、子弦、NOI、Emacs


    记录洛谷刷题C语言QAQ


    一、[COCI2015-2016#5] ZAMKA

    题目描述

    给定三个整数 L , D , X L,D,X L,D,X,你需要找到两个整数 N , M N,M N,M,使得:

    • N N N 为满足条件的最小整数, L ≤ N ≤ D L\le N\le D LND N N N 的各位数字之和为 X X X
    • M M M 为满足条件的最大整数, L ≤ M ≤ D L\le M\le D LMD M M M 的各位数字之和为 X X X

    保证 N , M N,M N,M 一定存在。

    输入格式

    输入共三行。

    第一行一个整数 L L L,第二行一个整数 D D D,第三行一个整数 X X X

    输出格式

    输出共两行。

    第一行为一个整数 N N N,第二行为一个整数 M M M

    样例 #1

    样例输入 #1

    1
    100
    4
    
    • 1
    • 2
    • 3

    样例输出 #1

    4
    40
    
    • 1
    • 2

    样例 #2

    样例输入 #2

    100
    500
    12
    
    • 1
    • 2
    • 3

    样例输出 #2

    129
    480
    
    • 1
    • 2

    样例 #3

    样例输入 #3

    1
    10000
    1
    
    • 1
    • 2
    • 3

    样例输出 #3

    1
    10000
    
    • 1
    • 2

    提示

    数据规模与约定

    对于 100 % 100\% 100% 的数据, 1 ≤ L ≤ D ≤ 1 0 4 1\le L\le D\le 10^4 1LD104 1 ≤ X ≤ 36 1\le X\le 36 1X36

    说明

    题目译自 COCI2015-2016 CONTEST #5 T1 ZAMKA

    代码如下

    #include
    #include
    #include
    #include 
    
    int sum[10007];
    
    int main() {
    	for(int i = 1; i <= 10000; ++i) {
    		int p = i;
    		while(p) {
    			sum[i] += p % 10;
    			p /= 10;
    		}
    	}
    	int l, d, x;
    	scanf("%d%d%d", &l, &d, &x);
    	for(int i = l; i <= d; ++i) {
    		if(sum[i] == x) {
    			printf("%d\n", i);
    			break;
    		}
    	}
    	for(int i = d; i >= l; --i) {
    		if(sum[i] == x) {
    			printf("%d\n", i);
    			break;
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    二、『MdOI R3』Number

    题目描述

    生活中我们会碰到一些特殊数字,这些数字使用一些特殊表达方式后会方便记忆和使用。比如说, 1 0 9 + 7 10^9+7 109+7 就非常常见——它相比于 1000000007 1000000007 1000000007,更方便选手看清数字而不必数 0 0 0,而且没有科学计数法的精度损失。

    你现在有一个形如 1 0 k + x 10^{k}+x 10k+x 的数字,请还原成一般写法。

    输入格式

    一行两个整数 k , x k,x k,x

    输出格式

    一行一个整数表示 1 0 k + x 10^k+x 10k+x

    样例 #1

    样例输入 #1

    9 7
    
    • 1

    样例输出 #1

    1000000007
    
    • 1

    提示

    【样例解释】

    1 0 9 + 7 = 1000000007 10^9+7=1000000007 109+7=1000000007

    更多样例请到这里领取。

    【数据范围】

    本题采用捆绑测试,换言之,你只有通过一个子任务的所有测试点,才可以拿到该子任务对应分数。

    子任务编号 x < x< x< k ≤ k\le k特殊性质分值
    1 10 10 10 9 9 912
    2 10 10 10 500 500 50015
    3 1 0 18 10^{18} 1018 18 18 188
    4 1 0 18 10^{18} 1018 500 500 500 k ≥ 18 k\ge18 k1825
    5 1 0 18 10^{18} 1018 500 500 50040

    对于所有数据, 0 ≤ x < 1 0 18 0\le x<10^{18} 0x<1018 0 ≤ k ≤ 500 0\leq k\leq 500 0k500

    代码如下

    #include
    #include
    #include
    #include 
    
    char s[30];
    int k,len;
    int a[100001];
    int main()
    {
    	scanf("%d",&k);
    	scanf("%s",&s);
    	for(int i=strlen(s)-1;i>=0;--i)
    		a[++len]=s[i]-'0';//转换成数字
    	a[k+1]++;//处理k
    	if(len <= k + 1)
    		len = k + 1;//获取位数
    	for(int i=1;i<=len;++i)
    		if(a[i]>9)
    			a[i+1]++,a[i]%=10;//处理进位
    	if(a[len+1])
    		++len;//最高位的处理
    	for(int i=len;i>=1;--i)
    		printf("%d",a[i]);//倒序输出结果
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    三、[Cnoi2020]子弦

    题目描述

    Cirno 有一个字符串 S \texttt{S} S,并希望你能求出 S \texttt{S} S 出现次数最多的非空子串的出现次数,记作 p p p

    输入格式

    一行,一个字符串 S \texttt{S} S

    输出格式

    一行,一个整数 p p p

    样例 #1

    样例输入 #1

    abababab
    
    • 1

    样例输出 #1

    4
    
    • 1

    提示

    数据范围与约定

    对于 100 % 100\% 100% 的数据保证: 0 < ∣ S ∣ ≤ 1 0 7 0< |\texttt{S}| \le 10^7 0<S107 S x ∈ [ a , z ] \texttt{S}_x\in[\texttt{a},\texttt{z}] Sx[a,z]

    子任务「本题采用捆绑测试」

    • Subtask1( 40 % 40\% 40%): ∣ S ∣ ≤ 100 |\texttt{S}| \le 100 S100
    • Subtask2( 40 % 40\% 40%): ∣ S ∣ ≤ 1 0 5 |\texttt{S}| \le 10^5 S105
    • Subtask3( 20 % 20\% 20%):无特殊限制。

    名词解释

    • 子串:字符串中任意个连续的字符组成的子序列称为该串的子串。

    代码如下

    #include
    #include
    #include
    #include 
    
    char s[10000005];
    int cnt[27];
    int mx;
    int main(void) {
        scanf("%s",s);
        int slen=strlen(s);
        for(int i=0;i<slen;i++) cnt[s[i]-'a']++;
        for(int i=0;i<26;i++) if(cnt[i]>mx) mx=cnt[i];
        printf("%d",mx);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    四、NOI

    题目背景

    小 L 是一个菜鸡。

    啥也不会的小 L 上了 NOI 考场。

    题目描述

    由于小 L 不会算数,现在小 L 告诉了你他每题的分数和队线,请你告诉他是否进队。

    NOI 分数的计算方式是:

    1. 笔试基础有 50 50 50 分,每通过一题加 1 1 1 分。
    2. 实际得分是每题的分数加上笔试的分数。
    3. 如果是 A 类,总分在此基础上再加 5 5 5 分。

    输入格式

    输入 9 9 9 个数 a , b , c , d , e , f , g , h , i a,b,c,d,e,f,g,h,i a,b,c,d,e,f,g,h,i,分别表示笔试通过题数, D1T1,D1T2,D1T3,D2T1,D2T2,D2T3 得分,是否 A 类(是 1 1 1,不是 0 0 0),集训队分数线。

    输出格式

    输出一行一个字符串。

    如果进了集训队,则输出 AKIOI

    如果没进,输出 AFO

    样例 #1

    样例输入 #1

    50 50 72 56 100 40 0 1 446
    
    • 1

    样例输出 #1

    AFO
    
    • 1

    样例 #2

    样例输入 #2

    50 95 100 64 100 72 30 0 446
    
    • 1

    样例输出 #2

    AKIOI
    
    • 1

    提示

    「样例解释」

    样例第一个是退役菜鸡小 L 的 NOI2020 成绩。

    第二个是某位队爷的 NOI2020 成绩。

    这不是啥都没解释吗


    「数据范围与说明」

    本题采用捆绑测试。仅有通过某个 Subtask 中所有测试点才能获得该 Subtask 的分数。

    • Subtask 1(30 points): h = 0 h = 0 h=0 a = 50 a = 50 a=50 i = 700 i = 700 i=700
    • Subtask 2(30 points): h = 0 h = 0 h=0 a = 50 a = 50 a=50
    • Subtask 3(40 points):无特殊限制。

    对于所有数据, 0 ≤ a ≤ 50 0\leq a \leq 50 0a50 0 ≤ b , c , d , e , f , g ≤ 100 0\leq b,c,d,e,f,g \leq 100 0b,c,d,e,f,g100 0 ≤ h ≤ 1 0 \leq h \leq 1 0h1 205 ≤ i ≤ 705 205\leq i \leq 705 205i705

    此处不考虑第 50 50 50 名同分的情况,可以认为如果同分小 L 优先。

    不保证测试数据为真实成绩。

    代码如下

    #include
    #include
    #include
    #include 
    
    int main()
    { 
    	long long a, b, c, d, e, f, g, h, i;
    	scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f,&g,&h,&i);
    	long long sum = a+b+c+d+e+f+g+50;
    	if(h == 1)
    	{
    		sum = sum + 5;
    	}
    	if(sum >= i)
    	{
    		printf("AKIOI\n");
    		
    	}
    	else 
    		printf("AFO\n");
    	return 0;
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    五、[COCI2019-2020#5] Emacs

    题目描述

    给定一个 n × m n\times m n×m 的只含有 .* 的矩阵。

    矩阵中 * 形成一些不重叠的长方形。它们不在边缘或顶点接触。

    求长方形有多少个?

    输入格式

    第一行:两个正整数 n n n m m m

    以下 n n n 行:表示题目描述中的矩阵。矩阵只含有 .*

    输出格式

    一行一个非负整数,你的答案。

    样例 #1

    样例输入 #1

    6 7
    ***....
    ***..**
    .....**
    .***.**
    .***...
    .***...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    样例输出 #1

    3
    
    • 1

    样例 #2

    样例输入 #2

    3 3
    *.*
    ...
    *.*
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #2

    4
    
    • 1

    样例 #3

    样例输入 #3

    1 10
    .*.**.***.
    
    • 1
    • 2

    样例输出 #3

    3
    
    • 1

    提示

    数据范围

    • 对于 10 p t s 10 pts 10pts 的数据,矩阵中每个长方形只含一个 *
    • 对于另外 15 p t s 15 pts 15pts 的数据,保证 n = 1 n=1 n=1
    • 对于所有的数据, 1 ≤ n , m ≤ 100 1\leq n,m\leq 100 1n,m100

    说明

    题目译自 COCI2019-2020 CONTEST #5 T1 Emacs ,译者 90693

    代码如下

    #include
    #include
    #include
    #include 
    
    int n,m,ans;
    char a[104][104];
    
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=0;i<n;++i)
    		scanf("%s",a[i]);
    	for(int i=0;i<n;++i)
    		for(int j=0;j<m;++j)
    			if(a[i][j]=='*'&&(!i||a[i-1][j]=='.')&&(!j||a[i][j-1]=='.'))++ans;
    	printf("%d",ans);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    脑机接口的发展研究
    Qt 信号与槽 讲解与案例
    【数据挖掘】百度机器学习-数据挖掘-自然语言处理工程师 2023届校招笔试详解
    【Linux操作系统】——安装VMware
    J2_jsp数据传递与保存
    电子学会2023年9月青少年软件编程(图形化)等级考试试卷(一级)真题,含答案解析
    Vue极简教程,相关指令详解
    Docker 哲学 - docker save | load | export | import 及实践
    访问Apache Tomcat的manager页面
    多级式多传感器信息融合中的状态估计(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/126359086