记录洛谷刷题C语言qaq
Alice、Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕。
三个人的需求量分别为 a , b , c a,b,c a,b,c,现在请你帮他们切蛋糕,规则如下:
每次切蛋糕可以选择蛋糕的任意一条直径,并沿这条直径切一刀(注意切完后不会立刻将蛋糕分成两部分)。
设你一共切了 n n n 刀,那么你将得到 2 n 2n 2n 个扇形的蛋糕(特别地,切了 0 0 0 刀被认为是有一个扇形,即整个圆形蛋糕),将这些蛋糕分配给 Alice,Bob 和 Cindy,要求每个扇形蛋糕只能完整地分给一个人。
三人分到的蛋糕面积比需要为 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 组数据中你至少需要切蛋糕的次数。
6
0 0 8
0 5 3
9 9 0
6 2 4
1 7 4
5 8 5
0
2
1
2
3
2
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 1≤T≤104,0≤a,b,c≤108,保证 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;
}
“傻子才相信概率。”
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) (b−a+1)(d−c+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 2 3 4 5
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 1≤T≤1000;
0 ≤ N ≤ 1 0 18 0 \le N \le 10^{18} 0≤N≤1018。
本题不采用捆绑测试。
No. | Constraints | Score |
---|---|---|
1 1 1 | 与样例相同 | 10 10 10 |
2 2 2 | N ≤ 300 N \le 300 N≤300 | 10 10 10 |
3 3 3 | N ≤ 5000 N \le 5000 N≤5000 | 30 30 30 |
4 4 4 | N ≤ 1 0 9 N \le 10^9 N≤109 | 20 20 20 |
5 5 5 | No further constraints | 30 30 30 |
#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;
}
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
AKXAKJXXXAXAQ
25
4
XXXAXXXXXXJXX
KXAXXXQJAXXXX
AQKQXXXKXXKQX
JXXXXXJXXXXXX
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 1≤N≤104。
【提示与说明】
题目译自 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;
}
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 2 3 4 5 6 7 8
ascending
8 7 6 5 4 3 2 1
descending
8 1 7 2 6 3 5 4
mixed
本题分值按 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;
}
求所有满足 0 ≤ x ≤ y ≤ N 0 \le x \le y \le N 0≤x≤y≤N 的非负整数对 ( 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 的值。
2
12
3
30
15
2040
满足要求的所有数对为: ( 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 1≤n≤103。
本题分值按 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;
}