[信息与未来 2022] 幸运数字
题目描述
如果一个十进制数字从左到右读时,所有数位都是从小到大严格递增的,我们就称它是幸运数字。例如:
- 9 9 9、 27 27 27、 1234 1234 1234 都是幸运数字;
- 11 11 11、 80 80 80、 243 243 243、 1503 1503 1503 不是幸运数字。
对于给定的 a a a 和 b b b,请你求出 a , a + 1 , a + 2 , ⋯ , b a,a+1,a+2,\cdots,b a,a+1,a+2,⋯,b 中幸运数字的数量。
输入格式
输入一行空格分隔的两个整数 a a a 和 b b b。
输出格式
输出一行一个整数,代表 a , a + 1 , a + 2 , ⋯ , b a,a+1,a+2,\cdots,b a,a+1,a+2,⋯,b 中幸运数字的数量。
样例 #1
样例输入 #1
1 100
讯享网
样例输出 #1
讯享网45
样例 #2
样例输入 #2
4096 65536
样例输出 #2
讯享网141
提示
对于 100 % 100\% 100% 的数据,满足 1 ≤ a ≤ b ≤ 1 , 000 , 000 1\leq a\leq b\leq 1,000,000 1≤a≤b≤1,000,000。
正解
暴力枚举。
代码
#include <bits/stdc++.h> //#define int long long using namespace std; int n,m; int ans; void solve() {
cin >> n >> m; for (int i = n;i <= m;i++) {
int now = i,f = 1; while (now) {
if (now%10 <= now/10%10) {
f = 0; break; } now /= 10; } ans += f; } cout << ans; } signed main() {
int TTT; // cin >> TTT; TTT = 1; while (TTT--) solve(); return 0; }
[信息与未来 2022] 沙滩面积
题目描述
我们获得了一幅陆地和水域情况的卫星照片,照片可以看成是一个 n n n 行 m m m 列的矩形,矩形中的每个格子要么是陆地(用半角点号 . \texttt{.} . 表示),要么是水域(用井号 # \texttt{\#} # 表示)。
虽然卫星照片可以清楚的辨别出陆地和水域,但陆地的具体类型却并不明确。现在我们了解到,对于一块是水域的方格,它向上、下、左、右四个方向 k k k 步之内可达的陆地格子,均会形成沙滩。例如,下图展示了 k = 2 k=2 k=2 的情况,蓝色的格子代表水域,标为黄色的陆地格子是沙滩。

你的任务是根据卫星照片计算出属于“沙滩”格子的数量。注意:卫星照片只拍摄了包含水域的部分,水域附近的沙滩可能出现在卫星照片边界之外。你可以假设卫星照片之外不存在任何水域。
输入格式
输入的第一行是空格分隔的三个整数 n , m n,m n,m 和 k k k,代表拍摄的卫星照片共有 n n n 行 m m m 列,以及形成沙滩的范围 k k k。
接下来 n n n 行,每行一个字符串。字符串的长度恰好是 m m m,代表卫星照片的一行,其中:
- 井号 # \texttt{\#} # 表示一片水域;
- 半角点号 . \texttt{.} . 表示一片陆地。
输出格式
输出一行一个整数,代表沙滩格子的数量。
样例 #1
样例输入 #1
讯享网2 4 2 .# ...#
样例输出 #1
26
样例 #2
样例输入 #2
讯享网5 10 3 .........# ..# .........# #.....# .....#
样例输出 #2
103
提示
对于 40 % 40\% 40% 的数据,满足 n = m = 1 n=m=1 n=m=1;
对于 100 % 100\% 100% 的数据,满足 1 ≤ n , m ≤ 100 1\leq n,m\leq 100 1≤n,m≤100, 1 ≤ k ≤ 10 1\leq k\leq 10 1≤k≤10。
正解
dfs暴搜。
代码
讯享网#include <bits/stdc++.h> //#define int long long using namespace std; int n,m,k; char a[200][200]; int vis[200][200]; int sum; void dfs(int x,int y,int dep) {
if (vis[x][y] != 1) vis[x][y] = 2; if (dep == k) return ; dfs(x+1,y,dep+1); dfs(x,y+1,dep+1); dfs(x-1,y,dep+1); dfs(x,y-1,dep+1); } void solve() {
cin >> n >> m >> k; for (int i = 20;i < 20+n;i++) for (int j = 20;j < 20+m;j++) {
cin >> a[i][j]; if (a[i][j] == '#') vis[i][j] = 1; } for (int i = 20;i < 20+n;i++) for (int j = 20;j < 20+m;j++) {
if (a[i][j] == '.') continue; dfs(i,j,0); } for (int i = 0;i < 200;i++) for (int j = 0;j < 200;j++) if (vis[i][j] == 2) sum++; cout << sum; } signed main() {
int TTT; // cin >> TTT; TTT = 1; while (TTT--) solve(); return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47204.html