• Atcoder Beginner Contest 139


    忽然看到有电子竞技就打了下

    A:
    B:
    C:nmd看错题了。wa了好几发。单调栈/单调队列
    D:
    无脑dp吧还是。好像不用开二维?

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    int n;
    string s[66];
    ll b[66][2][2];//第i位x[i]==j&&y[i]==k 的方案数
    int y[66];
    int main(){
        ios::sync_with_stdio(false);
        cin>>n;
        y[n]=1;
        for(int i=1;i<=n;i++){
            cin>>s[i];
        }
        b[0][0][0]=1;
        b[0][1][1]=1;
        for(int i=1;i<=n;i++){
            if(s[i]=="AND"){
                b[i][1][1]= b[i - 1][0][1] + b[i - 1][1][1];
    
                b[i][0][0]= b[i - 1][0][1] + b[i - 1][1][0] + b[i - 1][1][1] + b[i - 1][0][0];
    
                b[i][1][0]= b[i - 1][0][0] + b[i - 1][1][0];
    
                b[i][0][1]=0;
    
            }else{
                b[i][0][0]= b[i - 1][0][0] + b[i - 1][1][0];
    
                b[i][1][1]= b[i - 1][0][1] + b[i - 1][1][0] + b[i - 1][1][1] + b[i - 1][0][0];
    
                b[i][1][0]=0;
    
                b[i][0][1]= b[i - 1][0][1] + b[i - 1][1][1];
            }
        }
        cout << b[n][0][1] + b[n][1][1] << endl;
    }
    

    E:
    这题好玩!我第一眼一看这不是我之前出的那道吗
    造矩阵玩,我觉得挺有趣的

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N = 2e5+5;
    int n,m,q;
    struct point{
        ll x,y,z;
    }p[200005];
    struct Mat{
        ll a[3][3];
        Mat(){
            memset(a,0, sizeof(a));
        }
        Mat mul(const Mat &b){
            Mat c;
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    for(int k=0;k<3;k++){
                        c.a[i][j]+=a[i][k]*b.a[k][j];
                    }
                }
            }
            return c;
        }
        vector<ll> getans(point p){
            vector<ll> v;
            v.push_back(a[0][0]*p.x+a[0][1]*p.y+a[0][2]*p.z);
            v.push_back(a[1][0]*p.x+a[1][1]*p.y+a[1][2]*p.z);
            return v;
        }
    };
    Mat op1,op2,op3,op4,e;
    Mat mat[N];
    void init(){
        e.a[0][0]=e.a[1][1]=e.a[2][2]=1;
        op1.a[0][1]=-1,op1.a[1][0]=1,op1.a[2][2]=1;
        op2.a[0][1]=1,op2.a[1][0]=-1,op2.a[2][2]=1;
        op3.a[0][0]=-1,op3.a[1][1]=1,op3.a[2][2]=1;//op3.a[0][2]=p;
        op4=e,op4.a[1][1]=-1;//op4.a[1][2]=p;
    
        swap(op1,op2);
    }
    int main(){
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=1;i<=n;i++)cin>>p[i].x>>p[i].y,p[i].z=1;
        cin>>m;
        init();
        mat[0]=e;
        for(int i=1,op,p;i<=m;i++){
            cin>>op;
            if(op==1){
                mat[i]=op1.mul(mat[i-1]);
            }else if(op==2){
                mat[i]=op2.mul(mat[i-1]);
            }else if(op==3){
                cin>>p;
                op3.a[0][2]=p*2;
                mat[i]=op3.mul(mat[i-1]);
            }else{
                cin>>p;
                op4.a[1][2]=p*2;
                mat[i]=op4.mul(mat[i-1]);
            }
        }
        cin>>q;
        int a,b;
        while (q--){
            cin>>a>>b;
            vector<ll> ans = mat[a].getans(p[b]);
            cout<<ans[0]<<' '<<ans[1]<<endl;
        }
    }
    

    F:
    三种转移其实都想清楚了。
    但是我TM写的记忆化搜索,然后炸了。
    别问,以前就几乎没碰过期望这类的题目x

    看的题解 https://atcoder.jp/contests/abc189/editorial/588

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef double db;
    #define pdd pair<db,db>
    template<class Ty1,class Ty2>
    inline const pair<Ty1,Ty2> operator+(const pair<Ty1, Ty2>&p1, const pair<Ty1, Ty2>&p2){
        pair<Ty1, Ty2> ret;
        ret.first = p1.first + p2.first;
        ret.second = p1.second + p2.second;
        return ret;
    }
    template<class Ty1, class Ty2>
    inline const pair<Ty1, Ty2> operator-(const pair<Ty1, Ty2>&p1, const pair<Ty1, Ty2>&p2){
        pair<Ty1, Ty2> ret;
        ret.first = p1.first - p2.first;
        ret.second = p1.second - p2.second;
        return ret;
    }
    const int N = 2e5+5;
    db b[N],k[N];
    int n,m,t;
    bool c[N];
    int main(){
        ios::sync_with_stdio(false);
        cin>>n>>m>>t;
        for(int i=1,x;i<=t;i++)cin>>x, c[x]=1;
    
        db sum1=0,sum2=0;
    
        for(int i=n-1;~i;i--){
            sum1 -= b[i + m + 1];
            sum2 -= k[i + m + 1];
            if(c[i]){
                k[i]=1;
                b[i]=0;
            }else{
                b[i]= sum1 / m + 1;
                k[i]= sum2 / m;
            }
            sum1+=b[i];
            sum2+=k[i];
        }
        if(abs(1.0 - k[0]) <= 1e-6)cout << -1 << endl;
        else printf("%.11f
    ", b[0] / (1.0 - k[0]));
    }
    

    泪目

  • 相关阅读:
    海云健康:上云为10万家药店带去了什么价值?
    PostgreSQL数据目录深度揭秘
    当设计模式遇上 Hooks
    SpringBoot 优雅停止服务的几种方法
    【2021-08-19】连岳摘抄
    【2021-08-18】该休息,还是要好好休息
    【2021-08-17】心里没底,就给它得找个底
    NFLSOJ 1072
    Solution -「ARC 125F」Tree Degree Subset Sum
    Solution -「ARC 125E」Snack
  • 原文地址:https://www.cnblogs.com/MXang/p/14319393.html
Copyright © 2020-2023  润新知