2019 ICPC 閾跺窛绔�

I. Base62锛堥珮绮惧害杩涘埗杞崲锛�

姣旇禌褰撴椂闆疯強鑻e拰闃熼暱淇╀汉鎷跨潃澶ф暟鏉垮瓙鎽镐簡涓�鐧惧琛岋紙鐒跺悗鍦ㄧ己灏戝ぇ鏁版澘瀛愮殑鎯呭喌涓嬮浄鑿婅嫞涓�鍙戣繃浜唎rz锛�
浠婂ぉ琛ラ闅忎究鎽镐簡涓珮绮惧害杩涘埗杞崲鐨勬澘瀛愪氦涓婂幓灏辫繃浜嗚繕璐肩煭锛岋紝
鎴戝ソ鑿滐紝浣滑濂藉帀瀹�
const int maxn = 1000;
int  t[maxn], A[maxn];
char str1[maxn], str2[maxn];
int n, m;
void solve()
{
    int i, len, k;
    len = strlen(str1);
    for(i=len; i>=0; --i) t[len-1-i] = str1[i] -(str1[i]<58 ? 48: str1[i]<97 ? 55: 61);
    for(k=0; len;) {
        for(i=len; i>=1; --i) {
            t[i-1] +=t[i]%m*n;
            t[i] /= m;
        }
        A[k++] = t[0] % m;
        t[0] /=m;
        while(len>0&&!t[len-1])  len--;
    }
    str2[k] =NULL;
    for(i=0; i)
        str2[k-1-i] = A[i]+(A[i]<10 ? 48: A[i]<36 ? 55:61);
} 
int main()
{
    scanf("%d%d%s",&n, &m, str1);
    solve();
    printf("%s\n",str2);
    return 0;
}
馃檪

Largest Common Submatrix锛堝崟璋冩爤锛�

姹備袱涓煩闃电殑鏈�澶х浉鍚屽瓙鐭╅樀锛屼袱涓煩闃典綅缃彲浠ヤ笉鍚�
閲嶇偣鍦ㄤ袱涓煩闃甸兘鏄叏鎺掑垪锛岄偅涔堟垜浠彲浠ュ仛鍒癘锛�1锛夋壘鍒版煇鏁板瓧鍦ㄥ彟澶栦竴涓煩闃电殑浣嶇疆锛�
瀛樹笅b鏁扮粍涓瘡涓暟瀛楀嚭鐜扮殑浣嶇疆锛岀劧鍚庡氨鏅�氭渶澶�01瀛愮煩闃靛啓锛岋紝锛岀劧鍚庢寕鎺変簡QAQ锛岄鍏堟槸瓒呮椂锛屽姞浜嗗揩璇绘灉鐒跺緢蹇氨WA浜嗭紙WA12锛屼竴寮�濮嬪啓閿欎竴缁勫垽鏂潯浠惰繕璺戣繃10涓牱渚嬨�傘�傜浜嗭級
鑿婅嫞璇存槸鍥犱负娌℃湁鍒ゆ柇鍚堟硶鎬э紝浣嗘槸鎴戣繕鏄病鎯抽�歈AQ
鍙ソ鍙堝幓鎷垮崟璋冩爤鍐橯AQ
鍏ユ爤鐨勬槸璇ョ偣涓哄彸杈圭晫鏃剁煩闃电殑楂樺害鍜岀煩闃垫墍鑳藉埌杈剧殑宸﹁竟鐣岋紝鏈�鍚庣暀鍦ㄦ爤鍐呮病寮瑰嚭鏉ョ殑灏变互m涓哄彸杈圭晫锛屽惁鍒欎互j-1涓哄彸杈圭晫
鍐嶅涔犱竴涓嬪崟璋冩爤锛屼互鍗曡皟閫掑鏍堜负渚嬶紝
鍏ユ爤鏃讹紝寮瑰嚭鐨勬渶鍚庝竴涓粨鐐瑰氨鏄綋鍓嶇粨鐐圭殑宸﹁竟鐣岋紙浠h〃鐫�鏈�鍚庝竴涓ぇ浜庡綋鍓嶇偣鐨勫�硷級
瀵逛簬璇ョ粨鐐瑰脊鍑虹殑閭d簺缁撶偣锛屽綋鍓嶇粨鐐圭殑宸﹁竟绗竴涓綅缃氨鏄粬浠殑鍙宠竟鐣岋紙鍥犱负閬嶅巻鍒� j - 1 鐨勬椂鍊欎粬浠繕娌℃湁琚脊鍑烘潵锛屽埌 j 灏辫琚脊鍑烘潵浜嗭紙 浣犺姘斾笉姘� 璇級锛�
int n,m;
pii pos[MAXN];
pii q[MAXN];//鍗曡皟閫掑鏍�
int high[1111][1111];
int a[1111][1111],b[1111][1111];
int main()
{
    rd(n),rd(m);
    rpp(i,n) rpp(j,m) rd(a[i][j]);
    rpp(i,n) rpp(j,m) rd(b[i][j]),pos[b[i][j]]=make_pair(i,j);
    //
    int ans=0;
    rpp(i,n) rpp(j,m) 
    {
        int x=pos[a[i][j]].first,y=pos[a[i][j]].second;
        if(a[i-1][j]==b[x-1][y]) high[i][j]=high[i-1][j]+1;
        else high[i][j]=1; 
        ans=max(ans,high[i][j]);       
    }
    rpp(i,n)
    {
        int t=0;
        rpp(j,m)
        {
            if(j==1) q[++t]=make_pair(high[i][j],1);//闃熷垪涓璮irst瀛樿浣嶇疆鐨勯珮搴︼紝se浣嶇疆瀛樿浣嶇疆鍚戝乏鏈�杩滆兘寤朵几鍒板摢
            else
            {
                int x=pos[a[i][j]].first,y=pos[a[i][j]].second;
                if(a[i][j-1]!=b[x][y-1])//杩欐椂鍊欓槦鍒楅噷闈㈢殑鍏冪礌宸茬粡缁撴潫浜嗭紒鍐嶅線鍚庡氨鏂簡锛屾墍浠ュ叏閮ㄥ脊鍑�
                {
                    while(t>0) ans=max(ans,(j-q[t].second)*q[t].first),--t;
                    q[++t]=make_pair(high[i][j],j);
                }
                else
                {
                    int p=j;
                    while(t>0&&q[t].first>high[i][j])
                        ans=max(ans,(j-q[t].second)*q[t].first),p=q[t].second,--t;
                    q[++t]=make_pair(high[i][j],p);
                }
            }
        }
        while(t>0) ans=max(ans,(m-q[t].second+1)*q[t].first),--t;
    }
    cout<endl;
    //stop;
    return 0;
}
馃槼

B. So Easy

鍝囪繖涓锛岋紝鐜板満鍐欎簡濂戒箙杩榃A浜嗗ソ澶氬彂锛岀幇鍦ㄥ啓灏辨劅瑙夛紝锛岋紝鍡紵锛燂紵褰撴椂鎴戞槸鑴戞畫鍚楋紝1A锛屽氨鎯虫竻妤氳绠楄鍒楃殑璐$尞鍊煎氨琛屼簡銆�
int mn[MAXN];//姣忎竴琛岀殑鏈�灏忓��
int v[1111][1111];
int main()
{
    int n,x,y;cin>>n;
    rep(i,n) mn[i]=1<<30;
    rep(i,n) rep(j,n) 
    {
        cin>>v[i][j],mn[i]=min(mn[i],v[i][j]);
        if(v[i][j]==-1) x=i,y=j;
    }
    int ans=v[(x+1)%n][y]-mn[(x+1)%n];//鍒楃殑璐$尞
    ans+=v[x][(y+1)%n]-v[(x+1)%n][(y+1)%n]+mn[(x+1)%n];//琛屽浠栦笅涓�鍒楃殑璐$尞灏辩瓑鍚屼簬瀵逛粬鐨勮础鐚�
    cout<endl;
    //stop;
    return 0;
}
馃槙

 

G. Pot!!锛堢嚎娈垫爲锛�


鍙堟槸涓�閬撳湪鐜板満鐤媯WA鐨勯銆傘�傘�傜幇鍦ㄦ兂鎯虫劅瑙夊ソ姘斻�傘�傘�傛槑鏄庡緢濂藉啓锛屾垜鏄剳娈婹AQ
涓�涓暀璁氨鏄� 绾挎鏍� 鏁扮粍寮�澶х偣 [MAXN<<2]杩欐牱瀛怮AQ锛岃繕鏈夊氨鏄笉鍏虫祦灞呯劧绗簲涓牱渚嬪氨鎵戣浜嗭紝锛岋紝鎻愪氦鍓嶈寰楀叧娴�
杩樻湁涓�涓暀璁氨鏄� 鐪嬫竻鏁版嵁鑼冨洿鍟婂晩鍟婂晩锛岀幇鍦烘兂浜嗗ソ涔呴槦鍙嬬獊鐒朵竴鍙澶т簬2灏忎簬10鐐归啋姊︿腑浜�
#define lc root<<1
#define rc root<<1|1
#define ls root<<1,l,mid
#define rs root<<1|1,mid+1,r
struct IN
{
    int t[MAXN<<2],lazy[MAXN<<2];
    void build(int root,int l,int r)
    {
        if(l==r) {t[root]=0;return;}
        lazy[root]=0;
        int mid=(l+r)>>1;
        build(ls);build(rs);
        t[root]=0;
    }
    void push_down(int root)
    {
        t[lc]+=lazy[root],t[rc]+=lazy[root];
        lazy[lc]+=lazy[root],lazy[rc]+=lazy[root];
        lazy[root]=0;
    }
    void update(int root,int l,int r,int ql,int qr,int v)
    {
        if(ql<=l&&qr>=r)
        {
            t[root]+=v,lazy[root]+=v;
            return ;
        }
        int mid=(l+r)>>1;
        if(lazy[root]) push_down(root);
        if(ql<=mid) update(ls,ql,qr,v);
        if(qr>mid) update(rs,ql,qr,v);
        t[root]=max(t[lc],t[rc]);
    }
    int query(int root,int l,int r,int ql,int qr)
    {
        if(ql<=l&&qr>=r) return t[root];
        int mid=(l+r)>>1;
        if(lazy[root]) push_down(root);
        int ans=0;
        if(ql<=mid) ans=max(ans,query(ls,ql,qr));
        if(qr>mid) ans=max(ans,query(rs,ql,qr));
        return ans;
    }
}t2,t3,t5,t7;
int main()
{
    fast;
    int n,q;cin>>n>>q;
    t2.build(1,1,n);t3.build(1,1,n);t5.build(1,1,n);t7.build(1,1,n);
    while(q--)
    {
        string s;int l,r;
        cin>>s>>l>>r;
        if(s[1]=='U')
        {
            int v;cin>>v;
            if(v==2) t2.update(1,1,n,l,r,1);
            else if(v==3) t3.update(1,1,n,l,r,1);
            else if(v==4) t2.update(1,1,n,l,r,2);
            else if(v==5) t5.update(1,1,n,l,r,1);
            else if(v==6) t2.update(1,1,n,l,r,1),t3.update(1,1,n,l,r,1);
            else if(v==7) t7.update(1,1,n,l,r,1);
            else if(v==8) t2.update(1,1,n,l,r,3);
            else if(v==9) t3.update(1,1,n,l,r,2);
            else if(v==10) t2.update(1,1,n,l,r,1),t5.update(1,1,n,l,r,1);
        }
        else
        {
            int ans=0;
            ans=max(ans,t2.query(1,1,n,l,r));
            ans=max(ans,t3.query(1,1,n,l,r));
            ans=max(ans,t5.query(1,1,n,l,r));
            ans=max(ans,t7.query(1,1,n,l,r));
            cout<<"ANSWER "<endl;
        }
    }
    //stop;
    return 0;
}
馃樁

杩樻湁涓�閬撴病杈撹緭鍏ョ殑鐪�·绛惧埌棰樺氨涓嶈ˉ浜嗭紝over



锛堟垜鎰熻鎴戜篃over浜哘AQ鑿滅殑鐪熷疄锛�







你可能感兴趣的:(2019 ICPC 閾跺窛绔�)