七海ノ心象素描

所有的为时已晚都是恰逢其时

Nanami^2 avatar

Author

Nanami^2

大一学生 | 不是很聪明的样子

Telegram

我的频道

不定期推送灵感笔记

t.me/kisanami_blog
联系方式
QQ 群
1072614878
发送邮件

CF2193 Round 1079 (Div. 2)

个人题解

Nanami^2
Nanami^2 Even in the rain.
2026年02月12日
预计阅读 3 分钟
542 字

A

注意到 d(n)d(n) 非常小,不超过 100,那么直接枚举 ii,检查 x+d(i)x + d(i) 是否等于 ii 即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define SET(a,b) memset(a,b,sizeof(a))
#define CPY(a,b) memcpy(a,b,sizeof(b))
#define rep(i,j,k) for(int i=(j);i<=(k);++i)
#define per(i,j,k) for(int i=(j);i>=(k);--i)
int read() {
int a=0, f=1; char c=getchar();
while(!isdigit(c)) {
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c)) a=a*10+c-'0', c=getchar();
return a*f;
}
int T, x;
int d(int x) {
int res = 0;
while(x) {
res += x % 10;
x /= 10;
}
return res;
}
void solve() {
cin >> x;
int ans = 0;
for(int i = x;i <= x + 100;i++) {
if(x + d(i) == i) ans++;
}
cout << ans << endl;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while(T--) solve();
return 0;
}

B

因为是以每个点为中心向左右扩展,所以可以一眼看出来只要数字的相对位置符合原序列就行。

搞一个匹配算法显然过于繁琐,我们直接尝试对于每个 aia_i 寻找对应 ai=pja_i = p_jjj 即可。

具体的,维护一个指针 pospos 从左往右扫,直到满足 ai=pposa_i = p_{pos},如果到了 pos>npos > n 并且 aia_i 还不等于 pnp_n,那么肯定相对顺序不对,直接NO

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define SET(a,b) memset(a,b,sizeof(a))
#define CPY(a,b) memcpy(a,b,sizeof(b))
#define rep(i,j,k) for(int i=(j);i<=(k);++i)
#define per(i,j,k) for(int i=(j);i>=(k);--i)
int read() {
int a=0, f=1; char c=getchar();
while(!isdigit(c)) {
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c)) a=a*10+c-'0', c=getchar();
return a*f;
}
const int N = 2e5 + 5;
int T, n, p[N], a[N];
void solve() {
cin >> n;
for(int i = 1;i <= n;i++) cin >> p[i];
for(int i = 1;i <= n;i++) cin >> a[i];
int pos = 1;
for(int i = 1;i <= n;i++) {
while(pos <= n && p[pos] != a[i]) {
pos++;
}
if(pos > n && p[n] != a[i]) {
cout << "NO" << endl;
return;
}
}
cout << "YES" << endl;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while(T--) solve();
return 0;
}

C

觉得这篇文章怎么样?

点个赞,让更多人看到!

分享这篇文章

知识因分享而增值

分类

Codeforces
比赛

标签

构造
DP
贪心

版权声明:本文作者为 Nanami^2,首发于nanami7.top

遵循 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

评论区

本评论区由 EveSunMaple 自主开发