首页 > 其他分享 >ARC150 A+C题题解。

ARC150 A+C题题解。

时间:2022-10-10 01:33:24浏览次数:65  
标签:rp int 题解 ARC150 key printf amtE ###

如题,ARC150 A题 C题 的解题报告。

# A - Continuous 1
### 题意:
有1, 0, ? 组成的一个序列(?可以为0/1), 问恰好有且仅有k个i, 且连续的情况有多少种。
### 分析:
考虑O(n). 常见为转化成求以每个 i 结尾的信息。
即求长度为k的序列满足以下条件的有且仅有一个:
1. 没有零;(有连续k个1)
2. 前后没有1;(恰k个)

### 代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int n, k;
int a[N], b[N];
char s[N];
int main() {
int t;
scanf("%d", &t);
while(t--) { int ans=0, L=0, R=0;
scanf("%d%d", &n, &k);
cin>>s+1; s[n+1]='0', s[0]='0';

for(int i=1; i<=n; ++i) b[i]=b[i-1] + (s[i]=='1');
for(int i=1; i<=n; ++i) a[i]=a[i-1] + (s[i]=='0');

for(int i=k; i<=n; ++i) {
if(a[i]==a[i-k] && b[n]==b[i] && b[i-k]==0)
++ans;
}
if(ans==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}
```

# C - Path and Subsequence
### 题意:
判断一张图上,每一条 1~n 的路径上的点的权值A顺序构成的序列中都有子序列`B[]`.

### 分析:
考虑什么时候失败。
当一条路径上的点权 没有顺序出现完整个`B[]`就输出No.
所以一条路径越容易到 n 越容易失败。

考虑 `b[i]`
使用BFS,当遍历到x使`a[x] = b[i]`时停止当前点的路径扩展。
一旦一条路径到了 n 就失败(因为还没有出现完 整个的`b[]`呢)。(特判`a[n]=b[k]`)

i 从 1~n 依次处理即可。

### 代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long xt;
#define R(i) for(int i=1; i<=n; ++i)
#define rep(i, x, y) for(int i=x; i<=y; ++i)
#define q Q[rp]
#define p Q[rp^1]
const int N=1e5+10;
const int M=4e5+10;

int n, m, k;
int head[N], nex[M], to[M], amtE;
int a[N], b[N];

void addE(int x, int y) {
++amtE;
to[amtE] = y;
nex[amtE] = head[x];
head[x] = amtE;
}

int e[N];
int main() {
int x, y;
scanf("%d%d%d", &n, &m, &k);
for(int i=1; i<=m; ++i) scanf("%d%d", &x, &y), addE(x, y), addE(y, x);
for(int i=1; i<=n; ++i) scanf("%d", &a[i]);
for(int i=1; i<=k; ++i) scanf("%d", &b[i]);

int rp=0;
queue<int> Q[2];
Q[rp].push(1), e[1]=1;
for(int key=1; key<=k-(a[n]==b[k]); ++key) {
while(q.size()) {
x=q.front(); q.pop();
if(a[x]==b[key]) p.push(x);
else {
for(int i=head[x]; i; i=nex[i]) { y=to[i];
if(y==n) return 0&printf("No");
if(!e[y]) {
e[y]=1;
if(a[y]!=b[key]) q.push(y);
else p.push(y);
}
}
}
}
rp^=1;
}
printf("Yes");
return 0;
}

```

标签:rp,int,题解,ARC150,key,printf,amtE,###
From: https://www.cnblogs.com/voidDing/p/16774269.html

相关文章

  • P6772 [NOI2020] 美食家 题解
    一道不错的题目。一个朴素的dp就是\(f_{i,x}\)表示时间\(i\)时从1走到\(x\)的最大美味值,就有转移\(f_{i,v_j}=\max\{f_{i-w_j,u_j}+c_{v_j}+美食节贡献\}\),结......
  • 校内集训 小朋友的数字 题解
    校内集训小朋友的数字题解目录校内集训小朋友的数字题解题目分析思路代码题目不想调格式了,直接粘截图了……分析这道题就是简简单单的贪心,再加上个前缀和就行......
  • LG5219 无聊的水题I 题解
    传送门题意求有多少节点数为\(n\)的树,使得节点中最大的度数为\(m\)。节点有标号,两棵树不同当且仅当一对节点在一棵树中有连边,另一棵树中没有连边。\(1\len,m\le......
  • CF896D Nephren Runs a Cinema 题解
    顺手搬一下吧···inluogu和其他题解不太一样的柿子。把0元,50元,100元分别看成\(-1\),\(0\),\(1\),则问题转化成有多少种由\(-1\),\(0\),\(1\),构成的长为\(n\)的序......
  • 「题解」Codeforces 1572B Xor of 3
    我知道你很急,但你先别急。我急了我急了我急了。如果直接上去莽构造的话,很可能就是像我一样大分讨的后果。先特判掉全是1,或者1的个数是奇数的情况。我的做法是考虑所......
  • 洛谷 P2387 [NOI2014] 魔法森林 题解【动态加点 SPFA】
    题目大意给定一个由\(n\)个点\(m\)条边的无向图,每条边有权值\((a,b)\),求一条路径使这条路径上的\((a_{\max}+b_{\max})\)最小。思路正解应该是LCT动态维护MST......
  • LeetCode 字符串相乘算法题解 All In One
    LeetCode字符串相乘算法题解AllInOnejs/ts实现字符串相乘jsbignumbermultiply/js大数相乘字符串相乘原理&图解LeetCode43.MultiplyStringsLee......
  • R 包安装常见问题解决
    1.导读日常中使用R语言进行数据分析,或者画图的读者,相信一定逃不过的一个操作就是安装R包,那么在R包安装过程中,可能会出现一些问题,有时候这些问题并不是R包仓库下载过程中......
  • 【题解】sequence
    题意定义一个满足下列两个条件之一的序列\(a\)为单谷序列:\(\exists1\leqk\leqn\),有\(a_1<...<a_k>a_{k+1}>...>a_n\)\(\exists1\leqk\leq......
  • 2022洛阳师范学院ACM实验室招新竞赛题解
    A萌新签到题目描述欢迎大家来参加2022洛阳师范学院ACM实验室新生赛,我们实验室全体学长学姐从暑假一直期盼着你们的到来。我们的小萌新那么可爱,学长学姐肯定不会为难大......