BZOJ

Posted on 2017-07-10 17:19  Amphetamine  阅读(157)  评论(0编辑  收藏  举报

空调坏了、、、、热化了,没心情刷题继续补题解

跳过16,17打头的所有奶牛题(水题)

1800 飞行棋

找矩形,换句话说就是找两条不重合的直径,找半圆,然后就很水

1801中国象棋

dp 

1802

若有连续红格则不需要放旗子,(特判红格在最左边的情况),否则需要放的棋子数就是白格的个数

1823 满汉全席

看起来好像很恐怖,其实就是一个2sat,hx,my mx与my连边,hy与hx连边,就是读入好像有点问题,建议字符串读入

1833 count

数位动规 (这个好像可以预处理吧)

1854 游戏

二分图匹配,匈牙利,vis用时间戳,优化时间

1856

卡特兰数,算是一个经典的例题吧,可以变型为好多·C(N*2,N)/(N+1)

 1874

nim 后面那个问。。枚举一下就行吧。。。

1876

数论,高精度,压位。

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
//unsigned long long a1[1002],b1[1002],ans=0;int k=1,l=1;long long mod=10000000000;
#define ll long long
#define mod 1000000000ll
ll ans=0,k=1,l=1;
ll a1[2002],b1[2002];
bool pd(){
    int i;
    for(i=1;i<=max(l,k);i++){
        if(a1[i]!=b1[i])return 0;
    }
    return 1;
}
void jian(){
    int i=1;
    while(i<=l||i<=k){
        if(a1[i]<b1[i]){
            a1[i]+=mod;
            a1[i+1]--;
        }
        a1[i]-=b1[i];
        i++;
    }
}
void diva(){
    for(int i=k;i>1;i--){
            a1[i-1]+=(a1[i]%2)*mod;
            a1[i]/=2;
        }
        a1[1]/=2;
 
}
void divb(){
        for(int i=l;i>1;i--){
            b1[i-1]+=(b1[i]%2)*mod;
            b1[i]/=2;
        }
        b1[1]/=2;
}
void gcd(){
    if(pd())return ;
   while(a1[1]%2==0){diva();}
   while(b1[1]%2==0){divb();}
   if(pd())return ;
    while(a1[k]==0)k--;
    while(b1[l]==0)l--;
    int i=max(k,l);
    while(a1[i]==b1[i])i--;
    if(a1[i]>b1[i])jian();
    else {
    for(;i>=1;i--)swap(a1[i],b1[i]);swap(k,l);jian();}
    gcd();
}
int main(){
    char a[10001],b[10001];
    scanf("%s%s",a,b);
    int lena=strlen(a);
    int lenb=strlen(b);
    //memset(a1,0,sizeof(a1));
    //memset(b1,0,sizeof(b1));
    for(int i=lena-1,t=1;i>=0;i--,t*=10){
        if((lena-i-1)%9==0&&lena-i-1){
            k++;t=1;
 
        }
        ll x=a[i]-'0';
        a1[k]+=x*t;
    }
 
    for(int i=lenb-1,t=1;i>=0;i--,t*=10){
        if((lenb-i-1)%9==0&&lenb-i-1){
            l++;t=1;
 
        }
        ll x=b[i]-'0';
        b1[l]+=x*t;
    }
    //for(int i=l;i>=1;i--)cout<<b1[i];
    while(a1[1]%2==0&&b1[1]%2==0){
        diva();
        divb();
        ans++;
    }
 
    gcd();
    for(int i=1;i<=ans;i++){
    for(int j=k;j>=1;j--){
        a1[j]*=2;
        a1[j+1]+=a1[j]/mod;
        a1[j]%=mod;
    }
    if(a1[k+1]>0)k++;}
    while(a1[k]==0)k--;
    cout<<a1[k];
    k--;
    for(;k>=1;k--)printf("%09d",a1[k]);
 
    return 0;
}
View Code

PS:这是我们学校,普及组的题。。。强不强?

1877

赤裸裸的费用流啊。。。再次安利wya费用流

1878

离线乱搞,都说是树状数组,还有上主席树的。。

与众不同的蒟蒻我,写了莫队。。。

1929

!!!这题我咋做的???

哦无数据