AtCoder Beginner Contest 283 A~F代码
A题:
/*
coder:sunshine
school:njupt
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' //交互题删掉
#define x first
#define y second
typedef long long ll;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a, b;
cin >> a >> b;
cout << (int)pow(a, b) << endl;
return 0;
}
B题:
/*
coder:sunshine
school:njupt
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' //交互题删掉
#define x first
#define y second
typedef long long ll;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
int q;
cin >> q;
while (q--)
{
int ty;
cin >> ty;
if (ty == 1)
{
int k, x;
cin >> k >> x;
a[k] = x;
}
else
{
int x;
cin >> x;
cout << a[x] << endl;
}
}
return 0;
}
C题:
/*
coder:sunshine
school:njupt
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' //交互题删掉
#define x first
#define y second
typedef long long ll;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
int n = s.size();
int ans = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == '0')
{
int j = i;
while (j < n && s[j] == '0')
j++;
int num = j - i;
if (num & 1)
{
ans += num / 2 + 1;
}
else
{
ans += num / 2;
}
i = j - 1;
}
else
{
ans++;
}
}
cout << ans << endl;
return 0;
}
D题:
def solve():
s = '(' + input() + ')'
S = set()
stack = []
for c in s:
if c == '(':
stack.append(c)
elif c == ')':
while stack and stack[-1] != '(':
S.discard(stack.pop())
stack.pop()
else:
stack.append(c)
if c in S:
print('No')
return
else:
S.add(c)
print('Yes')
solve()
E题:
/*
coder:sunshine
school:njupt
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' //交互题删掉
typedef long long ll;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
#define int long long
const int mxn = 2e3 + 10;
int n, m;
int a[mxn][mxn], dp[mxn][2][2];
bool check(int c, int x, int y, int z)
{
c--;
if (c == 0)
{
return true;
}
else if (c == 1)
{
for (int i = 1; i <= m; i++)
{
int ok = 0;
if ((a[c][i] ^ y) == (a[c + 1][i] ^ x))
ok = 1;
if (i + 1 <= m && a[c][i] == a[c][i + 1])
ok = 1;
if (i - 1 >= 1 && a[c][i] == a[c][i - 1])
ok = 1;
if (!ok)
return false;
}
return true;
}
else if (c != n - 1)
{
for (int i = 1; i <= m; i++)
{
int ok = 0;
if (((a[c][i] ^ y) == (a[c + 1][i] ^ x)) || (a[c][i] ^ y == a[c - 1][i] ^ z))
ok = 1;
if (i + 1 <= m && a[c][i] == a[c][i + 1])
ok = 1;
if (i - 1 >= 1 && a[c][i] == a[c][i - 1])
ok = 1;
if (!ok)
return false;
}
return true;
}
else
{
c++;
for (int i = 1; i <= m; i++)
{
int ok = 0;
if ((a[c][i] ^ x) == (a[c - 1][i] ^ y))
ok = 1;
if (i + 1 <= m + 1 && a[c][i] == a[c][i + 1])
ok = 1;
if (i - 1 >= 1 && a[c][i] == a[c][i - 1])
ok = 1;
if (!ok)
return false;
}
return true;
}
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
cin >> a[i][j];
}
memset(dp, 0x3f, sizeof(dp));
dp[0][0][0] = dp[0][0][1] = dp[0][1][0] = dp[0][1][1] = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= 1; j++)
{
for (int k = 0; k <= 1; k++)
{
for (int v = 0; v <= 1; v++)
{
if (check(i, j, k, v))
{
dp[i][j][k] = min(dp[i][j][k], dp[i - 1][k][v] + j);
}
}
}
}
}
int ans = 1e18;
for (int j = 0; j <= 1; j++)
{
for (int k = 0; k <= 1; k++)
ans = min(ans, dp[n][j][k]);
}
if (ans == 1e18)
ans = -1;
cout << ans << endl;
}
F题:
/*
coder:sunshine
school:njupt
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' //交互题删掉
typedef long long ll;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;
int p[N], n, ans[N];
struct SegmentTree
{
struct Tree
{
int l, r;
int mn;
} tr[N * 4];
void pushup(int u)
{
tr[u].mn = min(tr[u << 1].mn, tr[u << 1 | 1].mn);
}
void build(int u, int l, int r)
{
tr[u] = {l, r};
if (l == r)
{
tr[u].mn = 1e9;
}
else
{
int mid = l + r >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
pushup(u);
}
}
void update(int u, int x, int t)
{ // 单点修改,不需要懒标记
int l = tr[u].l, r = tr[u].r, mid = l + r >> 1;
if (l == x && r == x)
{
tr[u].mn = min(tr[u].mn, t);
}
else
{
if (x <= mid)
update(u << 1, x, t);
else
update(u << 1 | 1, x, t);
pushup(u);
}
}
int query(int u, int x, int y)
{
int l = tr[u].l, r = tr[u].r, mid = l + r >> 1;
if (x <= l && y >= r)
return tr[u].mn;
else
{
int ans = 1e9;
if (x <= mid)
ans = min(ans, query(u << 1, x, y));
if (y > mid)
ans = min(ans, query(u << 1 | 1, x, y));
return ans;
}
}
} T1, T2;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> p[i];
}
memset(ans, 0x3f, sizeof ans);
T1.build(1, 1, n);
T2.build(1, 1, n);
for (int i = 1; i <= n; i++)
{
ans[i] = min(ans[i], p[i] + i + T1.query(1, 1, p[i]));
ans[i] = min(ans[i], -p[i] + i + T2.query(1, p[i], n));
T1.update(1, p[i], -p[i] - i);
T2.update(1, p[i], p[i] - i);
}
T1.build(1, 1, n);
T2.build(1, 1, n);
for (int i = n; i > 0; i--)
{
ans[i] = min(ans[i], p[i] - i + T1.query(1, 1, p[i]));
ans[i] = min(ans[i], -p[i] - i + T2.query(1, p[i], n));
T1.update(1, p[i], -p[i] + i);
T2.update(1, p[i], p[i] + i);
}
for (int i = 1; i <= n; i++)
{
cout << ans[i] << " ";
}
return 0;
}