A flip
题目思路
主要考察字符串
这道题 没什么好说的但还是有人做不对 ,题目的大意是说有一个字符串
S
S
S,让
S
S
S中的
0
0
0变成
1
1
1,
1
1
1变成
0
0
0。
那么可以直接穷举,边改边输出.
代码
#include <iostream>
using namespace std;
int main(){
string s;
cin >> s;
for(int i = 0 ;i < s.size(); i++){
if(s[i] == '1')
s[i] = '0';
else
s[i] = '1';
cout << s[i];
}
return 0;
}
B V
题目思路
主要考察图论的搜索
真奇怪的名字这道题目呢其实是一道easy的图论题, 题目的意思是给你一个序列
A
A
A表示
a
i
a_i
ai到
a
i
+
1
a_{i+1}
ai+1有一个符号"レ"其实也就是图里的第
i
i
i个点连接着第
i
+
1
i+1
i+1个点。如果某个边
a
x
a_x
ax链接
a
x
+
1
a_{x+1}
ax+1那么就把
x
x
x放入动态数组里面,最后逆序输出就这样.
代码
#include<bits/stdc++.h>
using namespace std;
const int N=109;
int n,m,a[N];
bool is_con[N];
vector<int> use;
int main() {
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
is_con[a[i]]=1;
for(int i=1;i<=n;i++){
use.clear();
int j;
for(j=i;j<=n&&is_con[j];j++)
use.push_back(j);
use.push_back(j);
i=j;
for(int k=use.size()-1;k>=0;k--)
cout<<use[k]<<" ";
}
return 0;
}
C Coverage
题目思路
主要考察深度优先搜索
本题的主要意思是给定一堆集合
A
A
A,让你求有多少种方案是的你选定的集合中所有的元素满足
1
≤
A
i
≤
N
1\leq A_i \leq N
1≤Ai≤N求方案总数。
然后看到题目数据范围时就可以断定 要 爆 搜。
代码
#include <bits/stdc++.h>
using namespace std;
int a[15][15],n,m,cnt;
int f[15];
void dfs(int step)
{
if (step == m + 1)
{
for (int i = 1; i <= n; i++)
if (!f[i])
return;
cnt++;
return;
}
for (int i = 1; i <= a[step][0]; i++)
f[a[step][i]]++;
dfs(step + 1);
for (int i = 1; i <= a[step][0]; i++)
f[a[step][i]]--;
dfs(step + 1);
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int x;
cin >> x;
a[i][0] = x;
for (int j = 1; j <= x; j++)
cin >> a[i][j];
}
dfs(1);
cout << cnt << endl;
return 0;
}
D Step Up Robot
题目思路
主要考察动态规划
这种思路是对于每个
d
p
[
i
]
dp[i]
dp[i]表示第
i
i
i层能不能走,由于N很小只有
10
10
10所以可以枚举一下状态让后挨个判断它之前是不是可以做过的,这个格子有没有陷阱,如果都满足那么
d
p
[
i
]
dp[i]
dp[i]等于
t
r
u
e
true
true然后看一下
d
p
[
x
]
dp[x]
dp[x]是不是
t
r
u
e
true
true。
代码
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
const int N = 1e5 +5;
int main(){
int n;
cin >> n;
vector<int> a(n + 1);
for(int i = 1; i <= n; i++){
cin >> a[i];
}
int m;
cin >> m;
vector<int> b(m + 1);
for(int i = 1; i <= m; i++){
cin >> b[i];
}
int x;
cin >>x;
vector<bool> trap(x + 1);
for(auto i : b){
trap[i] = true;
}
vector<bool> dp(x + 1);
dp[0] = true;
for(int i = 1; i <= x; i++){
if(trap[i]){
continue;
}
for(auto j : a){
if(j <= i && dp[i - j]){
dp[i] = true;
}
}
}
if(dp[x]){
cout << "Yes";
}
else{
cout << "No";
}
return 0;
}