AtCoder Beginner Contest 401
A - Status Code
题意
思路
模拟
代码
点击查看代码
#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int, int> pii;
const int mxn = 1e3 + 10;
void solve()
{
int s;
cin >> s;
if (s >= 200 && s <= 299)
{
cout << "Success" << endl;
return;
}
cout << "Failure" << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int __ = 1;
//cin >> __;
while (__--)
{
solve();
}
return 0;
}
B - Unauthorized
题意
思路
模拟
代码
点击查看代码
#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int, int> pii;
const int mxn = 1e3 + 10;
void solve()
{
int n, cnt = 0;
bool f = false;
cin >> n;
for (int i = 0; i < n; i++)
{
string s;
cin >> s;
if (s == "login")
{
f = true;
}
else if (s == "logout")
{
f = false;
}
else if (s == "public")
{
}
else
{
if (!f)
{
cnt++;
}
}
}
cout << cnt << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int __ = 1;
//cin >> __;
while (__--)
{
solve();
}
return 0;
}
C - K-bonacci
题意
思路
模拟
代码
点击查看代码
#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int, int> pii;
const int mxn = 1e3 + 10;
const int mod = 1e9;
void solve()
{
int n, k;
cin >> n >> k;
if (k >= n + 1)
{
cout << 1 << endl;
return;
}
vector<int> a(n + 1, 0);
for (int i = 0; i < k; i++)
{
a[i] = 1;
}
int sum = k;
for (int i = k; i < n + 1; i++)
{
a[i] = sum;
sum += a[i] - a[i - k];
sum += mod;
sum %= mod;
}
cout << a[n] << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int __ = 1;
//cin >> __;
while (__--)
{
solve();
}
return 0;
}
D - Logical Filling
题意
思路
对于所有的"\(o\)",其两边一定是".",把这个先填上,然后对于每段连续的"\(?\)",此时两段一定是".",若区间长度为奇数,填法就固定了(如\(.o.o.o.\));若为偶数则有两种填法(\(.o.o..\)或\(..o.o.\))。统计出最多能有多少\(o\),记为 \(cnt\),若 \(cnt=k\),则奇数区间确定,偶数区间不确定;若 \(cnt>k\),则都不能确定;不存在 \(cnt<k\)的情况。
代码
点击查看代码
#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int, int> pii;
const int mxn = 1e6 + 10;
void solve()
{
int n, m;
bool f = false;
string s, t;
cin >> n >> m >> s;
if (count(s.begin(), s.end(), 'o') == m)
{
for (int i = 0; i < n; i++)
{
cout << (s[i] == '?' ? '.' : s[i]);
}
cout << endl;
return;
}
for (int i = 0; i < n; i++)
{
if (s[i] == 'o')
{
if (i)
{
s[i - 1] = '.';
}
if (i != n - 1)
{
s[i + 1] = '.';
}
}
}
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == '?')
{
int j = i;
while (s[++j] == '?');
cnt += j - i + 1 >> 1;
i = j - 1;
}
}
if (cnt > m)
{
cout << s << endl;
return;
}
for (int i = 0; i < n; i++)
{
if (s[i] == '?')
{
int j = i;
while (s[++j] == '?');
if (j - i & 1)
{
for (int k = i; k < j; k++)
{
if ((!k || s[k - 1] == '.') && (k != n - 1 && s[k + 1] != 'o'))
{
s[k] = 'o';
}
else
{
s[k] = '.';
}
}
}
i = j - 1;
}
}
cout << s << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int __ = 1;
//cin >> __;
while (__--)
{
solve();
}
return 0;
}
E - Reachable Set
题意
思路
用并查集维护当前的连通分量,对于\(k\),大于\(k\)的点需要删除,为防止重复用\(set\)储存;小于等于\(k\)的点需要保留,但是最后需要判断\([1,k]\)是否只有一个连通分量
代码
点击查看代码
#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int, int> pii;
const int mxn = 2e5 + 10;
vector<int> pre;
int find(int x)
{
return x == pre[x] ? x : pre[x] = find(pre[x]);
}
bool join(int a, int b)
{
int fa = find(a), fb = find(b);
if (fa == fb) return false;
pre[fb] = fa;
return true;
}
void solve()
{
int n, m;
cin >> n >> m;
pre.resize(n);
iota(pre.begin(), pre.end(), 0);
vector<vector<int>> g(n);
for (int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
u--, v--;
g[u].push_back(v);
g[v].push_back(u);
}
set<int> del;
int cnt = 0; // [1,k]连通分量的数量
for (int k = 0; k < n; k++)
{
cnt++;
for (auto& j : g[k])
{
if (j > k) del.insert(j);
else cnt -= join(j, k); // 如果以前没相连那连通分量数量就-1
}
while (del.size() && *del.begin() <= k)
{
del.erase(del.begin());
}
cout << (cnt == 1 ? (int)del.size() : -1) << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int __ = 1;
//cin >> __;
while (__--)
{
solve();
}
return 0;
}






浙公网安备 33010602011771号