Educational Codeforces Round 118 (Rated for Div. 2)


好久没更新了。。

A

#include 
using namespace std;
typedef long long ll;
#define P pair
#define x first
#define y second
const int N = 5e5 + 10;

string a, b;
int main() {
    int T;
    cin >> T;
    while (T--) {
        int l1, l2;
        cin >> a >> l1 >> b >> l2;
        if (a.length() + l1 > b.length() + l2) {
            puts(">");
        } else if (a.length() + l1 < b.length() + l2) {
            puts("<");
        } else {
            // for(int i=0;i b[p1]) {
                    puts(">");
                    break;
                } else if (a[p1] < b[p1]) {
                    puts("<");
                    break;
                }
                p1++, p2++;
            }
            // cout << p1 << " " << p2 << endl;
            if (p1 < a.length() && p2 == b.length()) {
                bool f = 0;
                while (p1 < a.length()) {
                    if (a[p1++] != '0') {
                        puts(">");
                        f = 1;
                        break;
                    }
                }
                if (!f)
                    puts("=");
            } else if (p1 == a.length() && p2 < b.length()) {
                 bool f = 0;
                while (p2 < b.length()) {
                    if (b[p2++] != '0') {
                        puts("<");
                        f = 1;
                        break;
                    }
                }
                if (!f)
                    puts("=");
            } else if (p1 == a.length() && p2 == b.length())
                puts("=");
        }
    }
}

B

不难发现可以用最小的数去模
麻了,一直RE,感觉自己是个傻子

#include 
using namespace std;
typedef long long ll;
#define P pair
#define x first
#define y second
const int N = 1e6 + 10;
int a[N], n;
bool pos[N << 1], vis[N << 1];
int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n;
        int mn = 0;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            mn = max(mn, a[i]);
            pos[a[i]] = 1;
        }
        sort(a, a + n);

        int need = n / 2;
        for (int k = 1; k < n && need--; k++) {
            // for (int i = 0; i +k < n && need; i++) {
            //     // cout<<"cjeck: "<

C

#include 
using namespace std;
typedef long long ll;
const int N = 105;
int a[N], n;
ll need;
bool judge(ll k) {
    ll len = 0;
    int pre = 0;
    for (int i = 0; i < n - 1; i++) {
        len += min(k,1ll*a[i+1] - a[i]);
        // pre = a[i];
    }
    len += k;
    // cout<= need)
        return true;
    return false;
}
int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n >> need;
        for(int i=0;i>a[i];
        // judge(4);
        ll l = 0, r = 1e18 + 1, mid, ans;

        while (l <= r) {
            mid = (l + r) >> 1;
            if (judge(mid)) {
                r = mid - 1;
                ans = mid;
            } else {
                l = mid + 1;
            }
        }
        cout<

D

计数。。还不错的题

#include 
using namespace std;
typedef long long ll;
const int N = 5e5 + 10;
const int mod = 998244353;
ll dp[N], dp2[N], a[N];
int main() {
    int n, T;
    cin >> T;
    while (T--) {
        cin >> n;
        for (int i = 0; i <= n; i++) dp[i] = dp2[i] = 0;
        dp[0] = 1;
        int x;
        for (int i = 0; i < n; i++) {
            cin >> x;
            dp[x + 1] = (dp[x + 1]+ dp[x + 1]+dp[x])%mod;
            if (x > 0) dp2[x - 1] = (dp2[x - 1]+ dp2[x - 1]+dp[x-1])%mod;
            dp2[x + 1] = (dp2[x + 1] + dp2[x + 1]) % mod;
        }
        int ans = 0;
        for (int i = 0; i <= n; i++) ans = (ans + dp[i]) % mod;
        for (int i = 0; i <= n; i++) ans = (ans + dp2[i]) % mod;
        cout << (ans + mod -1 )%mod<< endl;
    }
}

E

bfs水题,这咋放到E的。。

#include 
#define P pair
#define x first
#define y second
#define endl '\n'
using namespace std;
const int N = 1e6;
vector> mp, vis;
int n, m, sx, sy;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
bool check(int x, int y) {
    return (1 <= x && x <= n && 1 <= y && y <= m && mp[x][y] && !vis[x][y]);
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin >> T;
    while (T--) {
        cin >> n >> m;
        mp.resize(n + 1);
        vis.resize(n + 1);
        char tmp;
        for (int i = 1; i <= n; i++) {
            mp[i].resize(m + 1);
            vis[i].resize(m + 1);
            for (int j = 1; j <= m; j++) {
                cin >> tmp;
                if (tmp == 'L') {
                    sx = i, sy = j;
                }
                mp[i][j] = tmp == '.' || tmp == 'L' ? 1 : 0;
                vis[i][j] = 0;
            }
        }
        queue

q; q.push(P(sx, sy)); vis[sx][sy] = 1; while (q.size()) { P now = q.front(); q.pop(); vector

ans; for (int i = 0; i < 4; i++) { int nx = now.x + dx[i], ny = now.y + dy[i]; if (check(nx, ny)) { ans.push_back(P(nx, ny)); } } // cout << "walk: " << now.x << " " << now.y << " " << ans.size() // << endl; if (ans.size() <= 1 || (now.x == sx && now.y == sy)) { vis[now.x][now.y] = true; for (auto p : ans) { if (!vis[p.x][p.y]) q.push(P(p.x, p.y)); } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (i == sx && j == sy) { cout << 'L'; continue; } cout << (vis[i][j] ? '+' : (mp[i][j] ? '.' : '#')); } cout << endl; } } }