• 洛谷刷题C语言:切蛋糕、概率、Bridž、NOTE、DOMINO


    记录洛谷刷题C语言qaq


    [NOI Online 2021 入门组] 切蛋糕

    题目描述

    Alice、Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕。

    三个人的需求量分别为 a , b , c a,b,c a,b,c,现在请你帮他们切蛋糕,规则如下:

    1. 每次切蛋糕可以选择蛋糕的任意一条直径,并沿这条直径切一刀(注意切完后不会立刻将蛋糕分成两部分)。

    2. 设你一共切了 n n n 刀,那么你将得到 2 n 2n 2n 个扇形的蛋糕(特别地,切了 0 0 0 刀被认为是有一个扇形,即整个圆形蛋糕),将这些蛋糕分配给 Alice,Bob 和 Cindy,要求每个扇形蛋糕只能完整地分给一个人。

    3. 三人分到的蛋糕面积比需要为 a : b : c a:b:c a:b:c(不保证是最简比例,且如果 a : b : c a:b:c a:b:c 中某个数为 0 0 0,表示那个人不吃蛋糕)。

    为了完成这个任务,你至少需要切几刀?

    输入格式

    本题单个测试点包含多组数据。

    第一行包含一个整数 T T T,表示数据组数。

    接下来 T T T 行,每行包含三个整数 a , b , c a,b,c a,b,c,表示三人的需求量。

    输出格式

    输出 T T T 行,第 i i i 行的输出表示第 i i i 组数据中你至少需要切蛋糕的次数。

    样例 #1

    样例输入 #1

    6
    0 0 8
    0 5 3
    9 9 0
    6 2 4
    1 7 4
    5 8 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    样例输出 #1

    0
    2
    1
    2
    3
    2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    提示

    样例 1 1 1 解释

    数据范围与提示

    30 % 30\% 30% 的数据满足: a = b = 0 a=b=0 a=b=0

    60 % 60\% 60% 的数据满足: a = 0 a=0 a=0

    100 % 100\% 100% 的数据满足: 1 ≤ T ≤ 1 0 4 , 0 ≤ a , b , c ≤ 1 0 8 1\le T\le 10^4,0\le a,b,c\le 10^8 1T1040a,b,c108,保证 a + b + c > 0 a+b+c>0 a+b+c>0

    数据由 SSerxhs 提供。

    代码如下

    #include
    #include
    #include
    #include 
    
    
    int main(){
    	int t;
    	scanf("%d",&t);
    	while(t--){
    		int a,b,c;
    		scanf("%d%d%d",&a,&b,&c);
    		if(a >  b)
    		{
    			a = a + b;
    			b = a - b;
    			a = a - b;		
    		}
    		if(a > c)
    		{
    			a = a + c;
    			c = a - c;
    			a = a - c;
    		}
    		if(b > c)
    		{
    			c = c + b;
    			b = c - b;
    			c = c - b;
    		}
    		if(a==0&&b==0)
    			printf("0\n");
    		else if(a==0&&b==c)
    			printf("1\n");
    		else if(a==0&&b!=c)
    			printf("2\n");
    		else if(a+b==c)
    			printf("2\n");
    		else if(a==b||b==c||a==c)
    			printf("2\n");
    		else
    			printf("3\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
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    「HMOI R1」概率

    题目背景

    “傻子才相信概率。”

    题目描述

    fz 退役之后正在学文化课。

    fz 见到一个题,这个题是这样的:

    给定区间 [ a , b ] [a, b] [a,b] [ c , d ] [c, d] [c,d],求从其中各等概率选择一个整数,和等于 e e e 的概率。

    fz 本来想把 “等于 e e e” 改成 “ ∈ [ e , f ] \in [e,f] [e,f]”,但是这样他就会变成辣鸡分类讨论出题人,所以他决定不改。

    为了方便,你只需输出答案乘 ( b − a + 1 ) ( d − c + 1 ) (b-a+1)(d-c+1) (ba+1)(dc+1) 的结果。可以证明这个数是一个整数。

    输入格式

    第一行一个整数 T T T,代表共有 T T T 组数据。

    接下来 T T T 行,每行五个整数 a , b , c , d , e a, b, c, d, e a,b,c,d,e

    输出格式

    T T T 行,每组数据一行一个自然数,表示对应的答案。

    样例 #1

    样例输入 #1

    1
    1 2 3 4 5
    
    • 1
    • 2

    样例输出 #1

    2
    
    • 1

    提示

    样例解释:

    对于样例的第一组数据,从 [ 1 , 2 ] [1,2] [1,2] [ 3 , 4 ] [3,4] [3,4] 中各随机选出一个整数的方案共有 4 4 4 种,其中只有 { 1 , 4 } \{1,4\} {1,4} { 2 , 3 } \{2,3\} {2,3} 两种方案和为 5 5 5,故概率为 1 2 \dfrac12 21


    N = max ⁡ { ∣ a ∣ , ∣ b ∣ , ∣ c ∣ , ∣ d ∣ , ∣ e ∣ } N=\max\{|a|,|b|,|c|,|d|,|e|\} N=max{a,b,c,d,e}

    对于所有数据:

    • 1 ≤ T ≤ 1000 1 \le T \le 1000 1T1000

    • 0 ≤ N ≤ 1 0 18 0 \le N \le 10^{18} 0N1018


    本题不采用捆绑测试。

    No.ConstraintsScore
    1 1 1与样例相同 10 10 10
    2 2 2 N ≤ 300 N \le 300 N300 10 10 10
    3 3 3 N ≤ 5000 N \le 5000 N5000 30 30 30
    4 4 4 N ≤ 1 0 9 N \le 10^9 N109 20 20 20
    5 5 5No further constraints 30 30 30

    • Idea: FZzzz
    • Solution: FZzzz
    • Code: FZzzz
    • Data: FZzzz

    代码如下

    #include
    #include
    #include
    #include 
    long long max(long long a, long long b)
    {
    	if(a > b)
    		return a;
    	else
    		return b;
    }
    
    
    long long min(long long a, long long b)
    {
    	if(a < b)
    		return a;
    	else
    		return b;
    }
    
    
    int main(){
    	long long n;
    	scanf("%lld",&n);
    	while(n--)
    	{
    		long long a, b, c, d, e;
    		scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e);
    	
    		long long sum = max(min(e - a,d)-max(e - b, c) +1,0);
    	
    		printf("%lld\n",sum);
    	}
    	
    	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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    [COCI2016-2017#4] Bridž

    题目描述

    Mirko 发明了一种卡牌游戏。卡牌只包含 A, K, Q, J \text{A, K, Q, J} A, K, Q, J X \text{X} X。它们的分值分别为 4 , 3 , 2 , 1 , 0 4,3,2,1,0 4,3,2,1,0

    给定 N N N 个包含 13 13 13 张卡牌的卡组,求这 N N N 个卡组中所有卡牌分值的总和。

    输入格式

    第一行,一个整数 N N N

    接下来的 N N N 行,每行一个长度为 13 13 13 的字符串 K i K_i Ki。字符串只包含字符 A, K, Q, J, X \text{A, K, Q, J, X} A, K, Q, J, X

    输出格式

    输出所有卡牌分值的总和。

    样例 #1

    样例输入 #1

    1
    AKXAKJXXXAXAQ
    
    • 1
    • 2

    样例输出 #1

    25
    
    • 1

    样例 #2

    样例输入 #2

    4
    XXXAXXXXXXJXX
    KXAXXXQJAXXXX
    AQKQXXXKXXKQX
    JXXXXXJXXXXXX
    
    • 1
    • 2
    • 3
    • 4
    • 5

    样例输出 #2

    40
    
    • 1

    提示

    【样例 1 解释】

    卡牌类型卡牌数量每张卡牌分值累计分值
    A \text{A} A 4 4 4 4 4 4 4 × 4 = 16 4 \times 4=16 4×4=16
    K \text{K} K 2 2 2 3 3 3 2 × 3 = 6 2 \times 3=6 2×3=6
    Q \text{Q} Q 1 1 1 2 2 2 1 × 2 = 2 1 \times 2=2 1×2=2
    J \text{J} J 1 1 1 1 1 1 1 × 1 = 1 1 \times 1=1 1×1=1
    X \text{X} X 5 5 5 0 0 0 5 × 0 = 0 5 \times 0=0 5×0=0

    因此分值总和为 16 + 6 + 2 + 1 + 0 = 25 16+6+2+1+0=25 16+6+2+1+0=25

    【数据规模与约定】

    对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 4 1 \le N \le 10^4 1N104

    【提示与说明】

    题目译自 COCI 2016-2017 CONTEST #4 T1 Bridž

    本题分值按 COCI 原题设置,满分 50 50 50

    代码如下

    #include
    #include
    #include
    #include 
    
    
    
    int main()
    {
        int n;
        scanf("%d",&n);
        int ans = 0;
        while (n--)
        {
        	char s[10001];
        	scanf("%s",&s);
        	for (int i = 0; i < 13; i++)
        	{
        		if (s[i] == 'A')
    			{
    				ans += 4;
    			} 
    			else if (s[i] == 'K')
    			{
    				ans += 3;
    			}
    			else if (s[i] == 'Q')
    			{
    				ans += 2;
    			} 
    			else if (s[i] == 'J')
    			{
    				ans += 1;
    			}
    		}
    	}
    	printf("%d\n",ans);
    	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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    [COCI2009-2010#1] NOTE

    题目描述

    C 大调的音阶由 8 8 8 个音符组成: c,d,e,f,g,a,b,C \texttt{c,d,e,f,g,a,b,C} c,d,e,f,g,a,b,C。将每个音符用数字 1 1 1 8 8 8 编号。

    音阶可以是升序的(从 1 1 1 8 8 8)、降序的(从 8 8 8 1 1 1),或者是混合的。

    根据音符的顺序,确定音阶是升序的、降序的还是混合的。

    输入格式

    一行八个整数,包含 1 1 1 8 8 8 之间的所有整数。每个整数在输入中只会出现一次。

    输出格式

    如果音阶是降序的,输出 descending

    如果音阶是升序的,输出 ascending

    如果音阶是混合的,输出 mixed

    样例 #1

    样例输入 #1

    1 2 3 4 5 6 7 8
    
    • 1

    样例输出 #1

    ascending
    
    • 1

    样例 #2

    样例输入 #2

    8 7 6 5 4 3 2 1
    
    • 1

    样例输出 #2

    descending
    
    • 1

    样例 #3

    样例输入 #3

    8 1 7 2 6 3 5 4
    
    • 1

    样例输出 #3

    mixed
    
    • 1

    提示

    【说明】

    本题分值按 COCI 原题设置,满分 30 30 30

    题目译自 COCI2009-2010 CONTEST #1 T1 NOTE

    代码如下

    #include
    #include
    #include
    #include 
    
    
    
    int a,b,c,d,e,f,g,h;
    int main()
    {
    	scanf("%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g,&h);
    	if(a<b&&b<c&&c<d&&d<e&&e<f&&f<g&&g<h) printf("ascending");//如果该序列为上升序列
    	else if(b<a&&c<b&&d<c&&e<d&&f<e&&g<f&&h<g) printf("descending");//如果该序列为下降序列
    	else printf("mixed");//如果都不是
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    [COCI2009-2010#1] DOMINO

    题目描述

    求所有满足 0 ≤ x ≤ y ≤ N 0 \le x \le y \le N 0xyN 的非负整数对 ( x , y ) (x,y) (x,y) 中, ∑ x + ∑ y \sum{x} + \sum{y} x+y 是多少。

    输入格式

    一行一个整数 N N N,意义如题面所述。

    输出格式

    一行一个整数,表示 ∑ x + ∑ y \sum{x} + \sum{y} x+y 的值。

    样例 #1

    样例输入 #1

    2
    
    • 1

    样例输出 #1

    12
    
    • 1

    样例 #2

    样例输入 #2

    3
    
    • 1

    样例输出 #2

    30
    
    • 1

    样例 #3

    样例输入 #3

    15
    
    • 1

    样例输出 #3

    2040
    
    • 1

    提示

    【样例 2 解释】

    满足要求的所有数对为: ( 0 , 0 ) (0,0) (0,0) ( 0 , 1 ) (0,1) (0,1) ( 0 , 2 ) (0,2) (0,2) ( 0 , 3 ) (0,3) (0,3) ( 1 , 1 ) (1,1) (1,1) ( 1 , 2 ) (1,2) (1,2) ( 1 , 3 ) (1,3) (1,3) ( 2 , 2 ) (2,2) (2,2) ( 2 , 3 ) (2,3) (2,3) ( 3 , 3 ) 。 (3,3)。 (3,3)

    【数据范围】

    对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 3 1 \le n \le 10^3 1n103

    【说明】

    本题分值按 COCI 原题设置,满分 50 50 50

    题目译自 COCI2009-2010 CONTEST #1 T2 DOMINO

    代码如下

    #include
    #include
    #include
    #include 
    
    
    
    int main()
    {
    	long long n,ans = 0;
    	scanf("%lld",&n);
    	
    	for(long long i = 0;i <= n;i++)
    	{
    		for(long long j = i;j <= n;j++)
    		{
    			ans = i + j+ ans;
    		}
    	}
    	printf("%lld\n",ans);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    【新日语2】第16課 田中さんは今会社を出るところです
    【高德】改变地图的背景色为自定义样式
    MQ的概述及优缺点及使用场景
    Postgresql时区设置,系统主机与数据库时间不一致,导致数据自动生成的时间错误
    5.1 Redis集群模式
    9 个对初学者开发者有价值的 GitHub 库✨
    内存和缓存?
    学生党用什么蓝牙耳机好?学生党性价比高的蓝牙耳机推荐
    上周热点回顾(1.22-1.28)
    Springboot 实践(19)负载平衡配置与运用
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/126449404