Educational Codeforces Round 96 (Rated for Div. 2)

题目传送门

A. Number of Apartments

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (register int i = a; i <= b; i++)
 
int n;
 
inline void solve(int T)
{
    cin >> n;
    rep(i, 0, n / 3 + 1) rep(j, 0, n / 5 + 1) rep(k, 0, n / 7 + 1) if(i * 3 + j * 5 + k * 7 == n) {
        cout << i << " " << j << " " << k << endl;
        return;
    }
    cout << "-1" << endl;
 
}
 
 
int main()
{
    // ios_base::sync_with_stdio(0);
    // cin.tie(0);
    // cout.tie(0);
 
    // freopen("in.txt", "r", stdin);
    // freopen("ans.txt", "w", stdans);
 
    int T = 1;
    cin >> T;
    rep(i, 1, T) solve(i);
 
}
View Code

B. Barrels

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (register int i = a; i <= b; i++)
 
ll n, k;
ll a[200010];
inline void solve(int T)
{
    cin >> n >> k;
    rep(i, 1, n) cin >> a[i];
    sort(a + 1, a + n + 1);
    rep(i, 1, min(k, n - 1)) a[n] += a[n - i];
    if(k == 0) cout << a[n] - a[1] << endl;
    else cout << a[n] << endl;
 
 
}
 
 
int main()
{
    // ios_base::sync_with_stdio(0);
    // cin.tie(0);
    // cout.tie(0);
 
    // freopen("in.txt", "r", stdin);
    // freopen("ans.txt", "w", stdans);
 
    int T = 1;
    cin >> T;
    rep(i, 1, T) solve(i);
 
}
View Code

C. Numbers on Whiteboard

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (register int i = a; i <= b; i++)
 
ll n;
inline void solve(int T)
{
    cin >> n;
    cout << 2 << endl;
    int tmp = n;
    rep(i, 1, n - 1) {
        cout << n - i << " " << tmp << endl;
        tmp = ceil((n - i + tmp) / 2.0);
    }
 
}
 
 
int main()
{
    // ios_base::sync_with_stdio(0);
    // cin.tie(0);
    // cout.tie(0);
 
    // freopen("in.txt", "r", stdin);
    // freopen("ans.txt", "w", stdans);
 
    int T = 1;
    cin >> T;
    rep(i, 1, T) solve(i);
 
}
View Code

D. String Deletion

模拟

E. String Reversal

还是挺好理解,贪心取每个字母移动的对应位置,然后就求个逆序对。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i, a, b) for(int i = a; i <= b; i++)
 
int n;
char s[200010];
int a[200010];
stack<int> sta[200];
ll ans;

void ksort(int l, int r) {
    int mid = (l + r) / 2;
    int i = l, j = mid + 1, id = 0;
    int f[r - l + 1];
    while(i <= mid || j <= r) {
        if(i > mid) f[++id] = a[j++];
        else if(j > r) f[++id] = a[i++];
        else if(a[i] <= a[j]) f[++id] = a[i++];
        else {
            f[++id] = a[j++];
            ans += mid - i + 1;
        }
    }
    rep(i, 1, id) a[l + i - 1] = f[i];
}
void merge(int l, int r) {
    if(l == r) return;
    int mid = (l + r) / 2;
    merge(l, mid);
    merge(mid + 1, r);
    ksort(l, r);
}

void run() {
    cin >> n;
    cin >> s + 1;
    rep(i, 1, n) sta[s[i]].push(n - i + 1);
    rep(i, 1, n) {
        a[i] = sta[s[i]].top();
        sta[s[i]].pop();
    }
    merge(1, n);
    cout << ans << endl;
}
 
int main() {
    cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);
    // int t; cin >> t; while(t--)
    run();
}
View Code

 

posted @ 2020-10-13 21:42  若讷  阅读(155)  评论(0编辑  收藏  举报