• 2019银川现场赛补题


    I. Base62

    x,y,z = (input().split())
    x = int(x)
    y = int(y)
    num = []
    map = {}
    for i in range(62):
        if i < 10:
            num.append(chr(i+48))
        elif i < 36:
            num.append(chr(i-10+65))
        else:
            num.append(chr(i-36+97))
        map[num[i]] = i
    cnt = 0
    ans = []
    for i in z:
        t = map[i]
        cnt = cnt * x + t
    
    while cnt > 0:
        ans.append(num[cnt % y])
        cnt = cnt // y
    if len(ans) == 0:
        ans.append(0)
    ans.reverse()
    for i in ans:
        print(i,end = "")
    

    G. Pot!!

    #include <cstdio>
    #include <iostream>
    #include <queue>
    #include <cmath>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    #define ll long long
    #define P pair<int,int>
    #define mk make_pair
    const ll INF=1e18;
    const int N=1e5+10;
    ll a[N];
    struct SegmentTree{
        int l,r;
        ll maxn;
        ll dat;
    }t[N*4][4];
    void build(int p,int l,int r,int i)
    {
        t[p][i].l = l;
        t[p][i].r = r;
        t[p][i].dat = 0;
        if(t[p][i].l == t[p][i].r){t[p][i].maxn = 0;return ;}
        int mid = (l+r)/2;
        build(p*2,l,mid,i);
        build(p*2+1,mid+1,r,i);
        t[p][i].maxn = max(t[p*2][i].maxn,t[p*2+1][i].maxn);
    }
    void spread(int p,int i)
    {
        if(t[p][i].dat)
        {
            t[p*2][i].maxn += t[p][i].dat;
            t[p*2+1][i].maxn += t[p][i].dat;
            t[p*2][i].dat += t[p][i].dat;
            t[p*2+1][i].dat += t[p][i].dat;
            t[p][i].dat = 0;
        }
    }
    void change(int p,int l,int r,ll v,int i)
    {
        if(l <= t[p][i].l && t[p][i].r <= r)
        {
            t[p][i].dat += v;
            t[p][i].maxn += v;
            return ;
        }
        int mid = (t[p][i].l+t[p][i].r)/2;
        spread(p,i);
        if(l<=mid) change(p*2,l,r,v,i);
        if(r>mid) change(p*2+1,l,r,v,i);
        t[p][i].maxn = max(t[p*2][i].maxn,t[p*2+1][i].maxn);
    }
    ll ask(int p,int l,int r,int i)
    {
        if(l<=t[p][i].l&&r>=t[p][i].r)
            return t[p][i].maxn;
        int mid = (t[p][i].l+t[p][i].r)/2;
        spread(p,i);
        ll maxn = 0;
        if(l<=mid) maxn = max(maxn,ask(p*2,l,r,i));
        if(r>mid) maxn = max(maxn,ask(p*2+1,l,r,i));
        return maxn;
    }
    vector<P>num[11];
    void init()
    {
        int map[10];
        map[2] = 0,map[3] = 1,map[5] = 2,map[7] = 3;
        for(int i=2;i<=10;i++){
            int x = i;
            for(int j=2;j<=x;j++){
                int sum = 0;
                while(x%j==0){
                    sum++;
                    x = x / j;
                }
                if(sum){
                    num[i].push_back(mk(map[j],sum));
                }
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        init();
        int n,q;
        cin >> n >> q;
        for(int i=0;i<4;i++){
            build(1,1,n,i);
        }
        while(q--){
            string s;
            cin >> s;
            if(s[1]=='U'){
                int l,r,x;
                cin >> l >> r >> x;
                for(int i=0;i<num[x].size();i++){
                    change(1,l,r,num[x][i].second,num[x][i].first);
                }
            }
            else{
                int l,r;
                cin >> l >> r;
                int ans = 0;
                for(int i=0;i<4;i++){
                    ans = max(ans*1LL,ask(1,l,r,i));
                }
                printf("ANSWER %d
    ",ans);
            }
        }
        return 0;
    }
    

    K Largest Common Submatrix(悬线法)

    #include <iostream>
    #include <cstdio>
    #include <map>
    using namespace std;
    #define ll long long
    #define mk make_pair
    #define P pair<int,int>
    const int N = 1e3 + 10;
    int a[N][N],up[N][N],lft[N][N],rgt[N][N],b[N][N];
    int n,m,x;
    //map<int,pair<int,int>>mp;
    struct node{
        int first,second;
    };
    node mp[N*N];
    int solve()
    {
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                lft[i][j] = rgt[i][j] = j;
                up[i][j] = 1;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=2;j<=m;j++){
                if(mp[a[i][j]].first == mp[a[i][j-1]].first && mp[a[i][j]].second == mp[a[i][j-1]].second)
                    lft[i][j] = lft[i][j-1];
            }
            for(int j=m-1;j>=1;j--){
                if(mp[a[i][j]].first == mp[a[i][j+1]].first && mp[a[i][j]].second == mp[a[i][j+1]].second)
                    rgt[i][j] = rgt[i][j+1];
            }
        }
        int ans = 0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(i>1 && mp[a[i][j]].first == mp[a[i-1][j]].first && mp[a[i][j]].second == mp[a[i-1][j]].second){
                    up[i][j] = up[i-1][j] + 1;
                    lft[i][j] = max(lft[i][j],lft[i-1][j]);
                    rgt[i][j] = min(rgt[i][j],rgt[i-1][j]);
                }
                ans = max((rgt[i][j]-lft[i][j]+1)*up[i][j],ans);
            }
        }
        return ans;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                scanf("%d",&a[i][j]);
                mp[a[i][j]].first = i;
                mp[a[i][j]].second = j;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                scanf("%d",&b[i][j]);
                mp[b[i][j]].first -= i;
                mp[b[i][j]].second -= j;
            }
        }
    //    for(int i=1;i<=n;i++){
    //        for(int j=1;j<=m;j++){
    //            cout << mp[a[i][j]].first <<  ' ' << mp[a[i][j]].second << ' ';
    //        }
    //        cout << '
    ';
    //    }
        int ans = solve();
        printf("%d
    ",ans);
        return 0;
    }
    //3 3
    //1 2 3
    //4 5 6
    //9 7 9
    //5 6 1
    //7 9 3
    //2 4 8
    
  • 相关阅读:
    设计模式学习每日一记(1.简单工厂模式)
    poj1068
    设计模式学习每日一记(2.外观模式)
    qooxdoo一句话备忘录[不断更新]
    设计模式学习每日一记(4.抽象工厂)
    C# 各种数据类型的最大值和最小值常数
    ASP.NET中实现二级或多级域名(修改UrlRewrite)
    网站中定时发送邮件
    重提URL Rewrite(1):IIS与ASP.NET
    Server Application Unavailable 的解决方法
  • 原文地址:https://www.cnblogs.com/hh13579/p/12771705.html
Copyright © 2020-2023  润新知