AtCoder Beginner Contest 283 A~F代码

AtCoder Beginner Contest 283 A~F代码
A题:

Power

/*
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题:

First Query Problem

/*
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题:

Cash Register

/*
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题:

Scope

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题:

Don’t Isolate Elements

/*
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题:

Permutation Distance

/*
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值