洛谷刷题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

0
2
1
2
3
2

提示

样例 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<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>


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;
}

「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,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<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
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;
}

[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

25

样例 #2

样例输入 #2

4
XXXAXXXXXXJXX
KXAXXXQJAXXXX
AQKQXXXKXXKQX
JXXXXXJXXXXXX

样例输出 #2

40

提示

【样例 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<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>



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;
}

[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

ascending

样例 #2

样例输入 #2

8 7 6 5 4 3 2 1

样例输出 #2

descending

样例 #3

样例输入 #3

8 1 7 2 6 3 5 4

样例输出 #3

mixed

提示

【说明】

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

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

代码如下

#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>



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;
}

[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

12

样例 #2

样例输入 #2

3

样例输出 #2

30

样例 #3

样例输入 #3

15

样例输出 #3

2040

提示

【样例 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<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>



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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值