zoukankan      html  css  js  c++  java
  • cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接

    http://codeforces.com/contest/1009

    A. Game Shopping

    直接模拟即可,用了一个队列来存储账单

    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <stack>
    #define ll long long
    using namespace std;
    
    const int MAX = 1010;
    
    queue<int> bill;
    int c[MAX];
    int main(){
        int gameNum, billNum;
        cin >> gameNum >> billNum;
        int t;
        for(int i = 0; i < gameNum; i++) cin >> c[i];
        for(int i = 0; i < billNum; i++){
            cin >> t;
            bill.push(t);
        }
        int ans = 0;
        int x = bill.front();
        for(int i = 0; i < gameNum; i++){
            if(x >= c[i]){
                ans++;
                bill.pop();
                if(bill.empty()) break;
                x = bill.front();
            }
        }
        cout << ans << endl;
    }

     B. Minimum Ternary String

    思维题

    题意是10可以互换位置,12可以互换位置,求将输入序列转为最小字典序

    可以发现,1是可以处于序列中任何位置的,因此我们记录1的数量,构造这样一个序列

    在第一个2前插入所有1,这样能使的2全部往后靠到最后

    注意不要忽略没有2的序列情况

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #define ll long long
    
    using namespace std;
    
    int const MAX = 100100;
    
    int main(){
        int a[MAX];
        char c;
        int len = 0;
        while((c = getchar()) != '
    '){
            a[len++] = c - '0';
        }
        int oneNum = 0;
        for(int i = 0; i < len; i++){
            if(a[i] == 1){ 
                oneNum++; 
            }//1可以放置于任意位置,先全部取出
        }
        for(int i = 0; i < len; i++){
            if(a[i] == 0){
                cout << 0;
            }
            else if(a[i] == 2){
                while(oneNum){
                    cout << 1;
                    oneNum--;
                }
                cout << 2;
            }
        }
        while(oneNum){
            cout << 1;
            oneNum--;
        }
        cout << endl;
    }

    C. Annoying Present

    通过特定变换使得数列平均值达到最大

    只要稍微分类一下就可以计算出各种情况

    应该考虑精度问题,使用cout应该设置精度

    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    #define ll long long
    using namespace std;
    
    const int MAX = 100100;
    
    ll sum(int n){
        ll ans = 0;
        for(int i = 1; i <= n; i++){
            ans+=i;
        }
        return ans;
    }
    
    int main(){
        ll x, d;
        ll ans = 0, n, m;
        cin >> n >> m;
        ll t1 = sum(n-1);
        if(n%2 == 1){
            ll t2 = sum((n-1)/2);
            for(int i = 0; i < m; i++){
                cin >> x >> d;
                ans+=x*n;
                if(d >= 0){
                    ans+=d*t1;
                }
                else{
                    ans += 2*d*t2;
                }
            }
        }
        else{
            ll t2 = sum(n/2-1);
            for(int i = 0; i < m; i++){
                cin >> x >> d;
                ans+=x*n;
                if(d >= 0){
                    ans+=d*t1;
                }
                else{
                    ans += 2*d*t2+n*d/2;
                }
            }
        }
        cout.precision(10);
        cout << ans*1.0/n << endl;
    }
  • 相关阅读:
    MySQl查询语句大全
    并发编程三
    并发编程二
    并发编程
    网络编程
    面向对象高级进阶
    python中的面向对象和面向过程
    为什么还需要学习TypeScript
    Chrome 神器,神奇的技巧
    vue-property-decorator知识梳理
  • 原文地址:https://www.cnblogs.com/Phoenix-blog/p/9366832.html
Copyright © 2011-2022 走看看