c++ 洛谷入门赛 #14 题解 (Div#4)

C++ 洛谷入门赛 #14 题解 (Div#4)

前置知识:

  • abs / min / max函数
    不要看不起小函数,会后悔的
  • bitset(如果你也不喜欢用bool数组)
    array
  • set
  • puts / putchar
  • 问号表达式
A. 数字判断
题目描述

给定三个整数 a , b , c a, b, c a,b,c,请你判断它们是否满足如下所有条件:

  1. a + b + c ≤ 100 a + b + c \leq 100 a+b+c100
  2. b b b 5 5 5 的倍数。
  3. c c c 7 7 7 的倍数。
  4. a − b > b − c a - b > b - c ab>bc
    如果上述条件均满足,请输出 Yes \texttt{Yes} Yes,否则输出 No \texttt{No} No
输入格式

输入只有一行三个整数,依次表示 a , b , c a,b,c a,b,c

输出格式

输出一行一个字符串表示答案。

样例 #1
样例输入 #1
50 10 7
样例输出 #1
Yes 
样例 #2
样例输入 #2
100 100 100 
样例输出 #2
No
提示
数据规模与约定

本题采用捆绑测试,只有通过全部测试点才能获得分数

对全部的测试点,保证 0 ≤ a , b , c < 2 31 0 \leq a, b, c < 2^{31} 0a,b,c<231

分析

仔细阅读题目范围

注意题目只 保证 0 <= a, b, c <= 2^31,乍一看没有任何问题,顺手一个int

然而……

当任意两个变量到达 2 31 2^{31} 231时。。。

code
#include <cstdio>
#define ll long long

int main() {
   
	ll a, b, c;

	scanf("%lld%lld%lld", &a, &b, &c);
	
	puts(a + b + c <= 100 && b % 5 == 0 && c % 7 == 0 && a - b > b - c ? "Yes" : "No");
}
B. 团伙首领
题目描述

某 E 正在机房值班,小朋友吵得她头晕脑胀,她将 N N N 名吵闹的小朋友带出了机房,依次编号为 1 , 2 , ⋯   , N 1,2,\cdots,N 1,2,,N

某 E 发现,这些小朋友形成了若干个小团伙,每个小朋友属于且只属于一个小团伙。她要求每一名小朋友指出自己所在小团伙的首领编号,第 i i i
名小朋友指认的首领编号为 S i S_i Si

假定所有小朋友都没有说谎,请问这 N N N 名小朋友中一共形成了多少个小团伙?

输入格式

输入共两行。

输入的第一行为一个正整数 N N N

输入的第二行为 N N N 个正整数,第 i i i 个为 S i S_i Si

输出格式

输出一行一个整数,代表机房里小团体的数目。

样例 #1
样例输入 #1
5 1 1 3 4 1 
样例输出 #1
3
提示
数据规模与约定
  • 对于 30 % 30\% 30% 的测试数据,每个小团体有且只有一个人。
  • 对于 100 % 100\% 100% 的测试数据, N ≤ 1 0 6 N \le10^6 N106 1 ≤ S i ≤ N 1 \leq S_i \leq N 1SiN。数据保证有解且合法,即每个小朋友都真实地指认了 ta 所在团伙的首领。
分析

仔细阅读题目范围

好像并没有坑……

code
#include <cstdio>
#include <set>

std::set<int>s;

int main() {
   
	int n, s;
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
   
		scanf("%d", &s);
		::s.insert(s);
	}
	
	printf("%d", (int)::s.size());
}
C. 枚举结构
题目描述

D-- 是 2077 年的一种新兴语言。在 D-- 语言中,引入了一种「枚举结构」。具体的,这一种结构可以使用以下表达式表示:

X Y Z W

其中, X , Z X, Z X,Z 为单个小写字母,代表变量名; Y , W Y, W Y,W 为整数,代表枚举的起始值和终止值。其代表,将变量 X X X Y Y Y 枚举到
W W W

由于 D-- 追求极致的安全性,因此为了进行确认,如果想要成功对 X X X 变量进行枚举,那么 Z Z Z 必须与 X X X 相同

例如,一个合法的枚举结构表达式如下:

i 1 i 100

其代表,将 i i i 变量从 1 1 1 枚举到 100 100 100


现在你收到了一个 D-- 枚举结构表达式 X Y Z W,请你判断和计算以下内容:

  1. 表达式的合法性 一个枚举结构表达式,只有满足以下全部条件,方可算作合法:

    • X X X Z Z Z 均为小写字母。
    • X X X Z Z Z 相同。
    • Y Y Y W W W 均为整数。在给定的表达式中,我们保证这一条总是成立。
  2. 如果合法,表达式将枚举的次数 对于一个合法的枚举表达式,如果 Y ≤ W Y \le W YW,其将会枚举 W − Y + 1 W - Y + 1 WY+1 次;否则,其将会枚举 Y − W + 1 Y - W + 1 YW+1 次。

输入格式

输入共一行一个表达式 X Y Z W,其中 X , Z X,Z X,Z 为单个大小写字母或一位数字, Y , W Y, W Y,W 为整数。

输出格式

输出共两行。

第一行为一个字符串。如果给定的表达式合法,输出 valid;否则输出 Invalid
第二行为一个整数,如果给定的表达式不合法,输出 − 1 -1 1;否则输出表达式的枚举次数。

样例 #1
样例输入 #1
i 1 i 100 
样例输出 #1
valid
100 
样例 #2
样例输入 #2
I 1 j 100 
样例输出 #2
Invalid
-1 
提示
数据规模与约定

对于一个表达式 X Y Z W X Y Z W XYZW,对于 100 % 100\% 100% 的数据, − 2 × 1 0 9 ≤ Y , W ≤ 2 × 1 0 9 -2 \times 10 ^ 9 \leq Y, W \leq 2 \times 10 ^ 9 2×109Y,W2×109</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值