首页 > 其他分享 >AtCoder Beginner Contest 363

AtCoder Beginner Contest 363

时间:2024-07-23 20:29:08浏览次数:9  
标签:AtCoder Beginner int cin long using 数有 363 回文

AtCoder Beginner Contest 363

前言

只出了三题,被 d 卡住了,事实上 e 题应该对我而言更简单,没及时换题。

A - Piling Up (atcoder.jp)

思路

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int R;
    cin >> R;

    if (R <= 99) cout << 100 - R << '\n';
    else if (R <= 199)cout << 200 - R << '\n';
    else cout << 300 - R << '\n';

    return 0;
}

B - Japanese Cursed Doll (atcoder.jp)

思路

问第 P 小的数比 T 差多少。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, T, P;
    cin >> N >> T >> P;

    vector<int> L(N + 1);
    for (int i = 1; i <= N; i ++) {
        cin >> L[i];
    }

    sort(L.begin() + 1, L.end());

    cout << max(T - L[N - P + 1], 0) << '\n';

    return 0;
}

C - Avoid K Palindrome 2 (atcoder.jp)

思路

全排列判一下回文串即可。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, K;
    cin >> N >> K;

    string s;
    cin >> s;

    sort(s.begin(), s.end());

    int ans = 0;

    do {
        int f = 1;
        for (int i = 0; i + K - 1 < N; i ++) {
            int l = i, r = i + K - 1;
            while (l <= r && s[l] == s[r])
                l ++, r--;
            if (r < l) {
                f = 0;
            }
        }
        ans += f;
    } while (next_permutation(s.begin(), s.end()));

    cout << ans << '\n';

    return 0;
}

D - Palindromic Number (atcoder.jp)

题意

问第 N 大的数字回文串是多少。

思路

除 0 以外,枚举位数观察回文数的分布,1 位的回文数有 9 个,2 位的回文数有 9 个,3 位的回文数有 90 个,4 位的回文数有 90 个,5 位的回文数有 900 个,6 位的回文数有 900 个,7 位的回文数有 9000 个,8 位的回文数有 9000 个 \(\dots\),所以我们可以快速枚举 N 位,看它定位在哪位数,由于最高位非 0 ,所以 N 需要减 1 在最高位来放置至少一个 1 ,剩下的就是从 这一位开始找第 \(m(N\%p)\) 小的自然数,此时我们只是确定了这个回文数的一半,根据以上的性质,每 \(9\times 10^x\) 个数是有奇数位和偶数位分布的,所以我们需要判断一下当前 N 是否小于 \(9\times 10^x\) ,是的话就是奇数位的,需要去掉最后一位。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    i64 N;
    cin >> N;

    if (N == 1) {
        cout << 0 << '\n';
        return 0;
    }

    N --;

    i64 p = 9;
    while (N >= 2 * p) {
        N -= 2 * p;
        p *= 10;
    }

    N --;

    string s = to_string(N % p + p / 9);
    string t = s;

    reverse(t.begin(), t.end());

    if (N < p) {
        s.pop_back();
    }
    s += t;
    cout << s << '\n';

    return 0;
}

E - Sinking Land (atcoder.jp)

思路

bfs + 优先队列。

先把临海的点加进最小堆里,其他待加入的点标记一下,每次海平面高过最低点后就向四周搜一下,把没加入的点加进去。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int H, W, Y;
    cin >> H >> W >> Y;

    set<pair<int, int>> st;
    vector mp(H + 1, vector<int>(W + 1));
    priority_queue<array<int, 3>> Q;
    for (int i = 1; i <= H; i ++) {
        for (int j = 1; j <= W; j ++) {
            cin >> mp[i][j];
            if (i == 1 || i == H || j == 1 || j == W) {
                Q.push({ -mp[i][j], i, j});
            } else {
                st.insert({i, j});
            }
        }
    }

    const int u[] = {0, 0, 1, -1}, v[] = {1, -1, 0, 0};

    int ans = H * W;
    for (int y = 1; y <= Y; y ++) {

        while (Q.size()) {
            auto [val, i, j] = Q.top();
            val = -val;
            if (val > y) break;
            Q.pop();

            ans --;
            for (int k = 0; k < 4; k ++) {
                int dx = i + u[k], dy = j + v[k];
                if (dx >= 1 && dx <= H && dy >= 1 && dy <= W) {
                    if (!st.count({dx, dy})) continue;
                    Q.push({ -mp[dx][dy], dx, dy});
                    st.erase({dx, dy});
                }
            }
        }

        cout << ans << '\n';
    }

    return 0;
}

标签:AtCoder,Beginner,int,cin,long,using,数有,363,回文
From: https://www.cnblogs.com/Kescholar/p/18319576

相关文章

  • ABC 363
    ABC363D-PalindromicNumber复盘一下几个细节:最后得到的\(n\)代表的是答案在长度为\(i\)的回文数中排第几,所以最终答案要加上长度更短的\(1\sim9\)是要算的长度奇偶的输出细节长度为\(1\simi\)的回文数个数\(10^{\frac{(i+1)}{2}}\)长度为\(i\)的回文数......
  • AtCoder Beginner Contest 363
    AtCoderBeginnerContest363PilingUp模拟题。点击查看代码#include<bits/stdc++.h>usingnamespacestd;inta;signedmain(){cin>>a;if(a%100!=0){a%=100;cout<<100-a;}else{cout<<100;}retur......
  • ABC363 DEF 题解
    ABC363DEF题解前情提要:赛时过了ABCE。D-PalindromicNumber题目链接其实赛时已经看出了一些性质,但没想完做法,赛后看题解才发现这么简单/fn首先,为了方便,我们不把\(0\)视作回文数(因此需要特判一下\(n=1\)的情况)。下面要证明:\(d\)位回文数有\(10^{\left\lfloor\f......
  • AtCoder Beginner Contest 363
    AtCoderBeginnerContest363A-PilingUp每100分显示一个^。现在已知分数,问想要多显示一个^需要再得多少分。模拟题,显示\(i\)个^的最小分数是\(100\timesi\),而当前的^是\([\frac{R}{100}]\),\(R\)是当前的分数。所以答案就是\(([\frac{R}{100}]+1)\times100-R\)#includ......
  • AtCoder Beginner Contest 363 补题记录(A~F)
    难度:A<B<C<E≈F<<D做题顺序:A->B->C->F->E->D其实VP的时候perf还是有\(2000+\)的(虽然说D炸了),perf应该是\(2028\)左右Asignedmain(){intn;cin>>n;intcnt=0;do{++cnt;++......
  • AtCoder Beginner Contest 363
    A.PilingUp(\(\operatorname{Difficulty}11\))让你求某个数距离最近的一个\(k\times100\)的距离是多少.水.#include<bits/stdc++.h>usingnamespacestd;namespacehdk{ namespacefastio{ voidrule(boolsetting=false){std::ios::sync_with_stdio(setting);} ......
  • ABC 363 E - Sinking Land 题解
    用一个优先队列维护和海相邻的位置,每次海面上升就判断一下队列中海拔最低的那个位置会不会被淹没,如果会,就删除,同时它上下左右的位置也是和海相邻的(或者就在海里),把它们加进优先队列里,记得判断一下加入的格子曾经有没有被加入过队列,不要加重复了。点击开DconstintN=1099;int......
  • ABC 363 F - Palindromic Expression 题解
    下文中提到的数字都不包含0,注意把含0的数字特判掉。反转指各个数位倒过来,比如114514反转过后就是415411。注意到,答案一定是这样:数列\(a\)的各个数字相乘,乘以一个回文,再把数列\(a\)倒过来,每个数反转,再相乘。比如:2*57*184481*75*2,其中的数列\(a\)就是:257,中间的回文......
  • AtCoder Beginner Contest 360 ( A~D)
    A-AHealthyBreakfasthttps://atcoder.jp/contests/abc360/tasks/abc360_a水题题意:只要R在M左侧即可思路:因为只要三位,所以只需要判断R在第一位或M在最后一位,有重复的情况#include<iostream>#include<cmath>#include<algorithm>usingnamespacestd;intmain(){......
  • LeetCode 363. 矩形区域不超过 K 的最大数值和
    363.矩形区域不超过K的最大数值和给你一个 mxn 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例1:输入:matrix=[[1,0,1],[0,-2,3]],k=2输出:2解释:蓝色边......