[更新]BZOJ代码

戳一下更新

1000

#include <iostream>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout<<a + b<<endl;
    return 0;
}

1001

#include <cstdio>
#include <cstring>
#include <iostream>
//By sssSSSay
//Max_Flow
#define INF 100000007
using namespace std;
struct node {int next,val,to;}E[6000010];
int n,m,tot,Ans,dis[1000010],H[1000010],q[1000010];
void Add(int u,int v,int c){E[++tot].next = H[u];E[tot].to = v;E[tot].val = c;H[u] = tot;}
void Link(int u,int v,int c){Add(u,v,c);Add(v,u,c);}
int Num(int x,int y){return (x - 1) * m + y;}
int Bfs(){
    memset(dis,-1,sizeof(dis));
    int h = 1,t = 1;dis[1] = 0;q[h] = 1;
    while(h <= t){
        int u = q[h];
        // printf("%d :",u);
        for(int i=H[u];i;i=E[i].next){
            int v = E[i].to;
            // printf("%d ",v);
            if(dis[v] == -1 && E[i].val){
                dis[v] = dis[u] + 1;
                q[++t] = v;
            }
        }h++;
        // printf("\n");
    }if(dis[n * m] == -1)return 0;
    return 1;
}
int Max_Flow(int x,int Min){
    if(x == n * m)return Min;
    int w,used = 0;
    for(int i=H[x];i;i=E[i].next){
        int v = E[i].to;
        if(E[i].val && dis[v] == dis[x] + 1){
            w = Min - used;
            w = Max_Flow(v,min(w,E[i].val));
            used += w;
            E[i].val -= w;
            E[i+1].val += w;
            if(used == Min)return Min;
        }
    }if(!used)dis[x] = -1;
    return used;
}
int main(){
    scanf("%d%d",&n,&m);
    int x;
    for(int i=1;i<=n;i++){
        for(int j=1;j<m;j++){
            scanf("%d",&x);
            Link(Num(i,j),Num(i,j+1),x);
        }
    }
    for(int i=1;i<n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&x);
            Link(Num(i,j),Num(i+1,j),x);
        }
    }
    for(int i=1;i<n;i++){
        for(int j=1;j<m;j++){
            scanf("%d",&x);
            Link(Num(i,j),Num(i+1,j+1),x);
        }
    }
    while(Bfs())Ans += Max_Flow(1,INF);
    printf("%d\n",Ans);
    return 0;
}

1002

#include <cstdio>
#include <cstring>
#include <iostream>
//by sssSSSay
//eh^ zhao gui lv
//f[1] = 1;f[2] = 3;f[i] = f[i-1] + f[i-2]
//F[i] = f[i] * f[i] - (i % 2 == 0) * 4
using namespace std;
const int Maxn = 10001;
int n,LenPre,LenNow,LenTemp,LenAns;
int Pre[Maxn],Now[Maxn],Temp[Maxn],Ans[Maxn];
void Add(){
    int Len = max(LenPre,LenNow),x = 0;
    for(int i=1;i<=Len;i++){
        Temp[i] = Pre[i] + Now[i] + x;
        x = Temp[i] / 10;
        Temp[i] %= 10;
    }while(x){Temp[++Len] = x % 10;x /= 10;}
    LenTemp = Len;
}
void Mul(){
    int Len;
    for(int i=1;i<=LenPre;i++){
        Len = i + LenPre - 1;int x = 0;
        for(int j=1;j<=LenPre;j++){
            Ans[i+j-1] += Pre[i] * Pre[j] + x;
            x = Ans[i+j-1] / 10;
            Ans[i+j-1] %= 10;
        }
        while(x > 0){Ans[++Len] += x % 10;x /= 10;}
    }LenAns = Len;
}
int main(){
    scanf("%d",&n);
    LenPre = 1;Pre[1] = 1;
    LenNow = 1;Now[1] = 3;
    for(int i=2;i<=n;i++){
        Add();
        LenPre = LenNow;memcpy(Pre,Now,sizeof(Now));
        LenNow = LenTemp;memcpy(Now,Temp,sizeof(Temp));
    }
    Mul();
    if(n % 2 == 1){
        for(int i=LenAns;i>=1;i--)printf("%d",Ans[i]);
        printf("\n");
    }
    else {
        int Cur = 1;Ans[Cur] -= 4;
        while(Ans[Cur] < 0){Ans[Cur] += 10;Ans[++Cur]--;}
        for(int i=LenAns;i>=1;i--)printf("%d",Ans[i]);
        printf("\n");
    }
    return 0;
}

1003

#include <cstdio>
#include <cstring>
#include <iostream>
//By sssSSSay
//DP
typedef long long LL;
#define INF 100000007
using namespace std;
const int Maxn = 110;
int H[Maxn],dis[Maxn],q[Maxn*Maxn],Path[Maxn],Temp[Maxn];
LL f[Maxn],Dp[Maxn][Maxn];
int n,m,k,e,u,v,c,x,y,z,d,K,tot,Ans;
bool vis[Maxn],Judge[Maxn][Maxn],Can[Maxn];
struct node {int to,val,next;}E[Maxn];
void Add(int u,int v,int c){E[++tot].to = v;E[tot].val = c;E[tot].next = H[u];H[u] = tot;}
int Spfa(int a,int b){
    for(int i=1;i<=m;i++){
        dis[i] = INF;
        vis[i] = 0;
        Can[i] = 0;
    }
    for(int i=1;i<=m;i++)for(int j=a;j<=b;j++)if(Judge[i][j])Can[i] = 1;
    int h = 1,t = 1;dis[1] = 0;q[h] = 1;Path[1] = -1;
    while(h <= t){
        int u = q[h];
        vis[u] = 0;
        for(int i=H[u];i;i=E[i].next){
            int v = E[i].to;
            if(Can[v])continue;
            if(dis[u] + E[i].val < dis[v]){
                dis[v] = dis[u] + E[i].val;
                Path[v] = u;
                if(!vis[v]){
                    vis[v] = 1;
                    q[++t] = v;
                }
            }
        }h++;
    }return dis[m];
}
int main(){
    scanf("%d%d%d%d",&n,&m,&k,&e);
    for(int i=1;i<=e;i++){
        scanf("%d%d%d",&u,&v,&c);
        Add(u,v,c);Add(v,u,c);
    }
    scanf("%d",&d);
    for(int i=1;i<=d;i++){
        scanf("%d%d%d",&x,&y,&z);
        for(int j=y;j<=z;j++)Judge[x][j] = 1;
    }
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++)Dp[i][j] = (LL)Spfa(i,j);
    }
    for(int i=1;i<=n;i++){
        f[i] = (LL)Dp[1][i] * (LL)i;
        for(int j=0;j<i;j++)f[i] = min(f[i],f[j] + (LL)k + Dp[j+1][i] * (LL)(i - j));
    }
    printf("%d\n",f[n]);
    return 0;
}

1004

#include <cstdio>
#include <cstring>
#include <iostream>
typedef long long LL;
using namespace std;
const int Maxn = 201;
int C[Maxn][Maxn];
int Sr,Sg,Sb,n,p,m;
void Solve(){
    for(int i=2;i<=n+1;i++){
        for(int j=0;j<=i;j++){
            C[i][j] = (C[i][j] + C[i-1][j]) % p;
            if(j != 0)C[i][j] = (C[i][j] + C[i-1][j-1]) % p;
        }
    }
}
LL Pow(int a,int n){
    int c = 1;
    while(n){
        if(n & 1)c = (c * a) % p;
        a = (a * a) % p;
        n = n >> 1;
    }return c;
}
int main(){
    scanf("%d%d%d%d%d",&Sr,&Sb,&Sg,&m,&p);
    C[1][0] = 1;C[1][1] = 1;
    n = Sr + Sb + Sg;Solve();
    LL S = ((LL)C[n][Sr] * (LL)C[n - Sr][Sg]) % p;
    printf("%lld",(S * Pow(m + 1,p - 2)) % p);
    // while(1);
    return 0;
}

1005

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#define p 1000000
using namespace std;
const int Maxn = 1010;
int n,d[Maxn],pri[Maxn*Maxn],Ans[Maxn],LenAns,tot,cnt,m,num[Maxn];
inline bool Judge(int x){int N = sqrt(x);
    for(int i=2;i<=N;i++)if(x % i == 0)return 0;
    return 1;
}
void Mul(int x){
    for(int i=1;i<=LenAns;i++)Ans[i] *= x;
    for(int i=1;i<=LenAns;i++){
        Ans[i + 1] += Ans[i] / p;
        Ans[i] %= p;
    }
    while(Ans[LenAns + 1] > 0){LenAns++;Ans[LenAns + 1] += Ans[LenAns] / p;Ans[LenAns]  %= p;}
}
void Solve(int x,int c){
    for(int i=1;i<=x;i++){
        int k = i;
        for(int j=1;j<=cnt;j++){
            if(k <= 1)break;
            while(k % pri[j] == 0){
                num[j] += c;
                k /= pri[j];
            }
        }
    }
}
void Print(){
    for(int i=LenAns;i>=1;i--){
        if(i == LenAns)printf("%d",Ans[i]);
        else printf("%06d",Ans[i]);
    }printf("\n");
}
int main(){
    scanf("%d",&n);Ans[1] = 1;LenAns = 1;
    if(n == 1){
        scanf("%d",&d[1]);
        if(d[1] == 0)printf("1\n");
        else printf("0\n");
        return 0;
    }
    for(int i=1;i<=n;i++){
        scanf("%d",&d[i]);
        if(d[i] == 0){
            printf("0\n");
            return 0;
        }
        else if(d[i] != -1)tot += d[i] - 1;
        else m++;
    }
    if(tot > n - 2){
        printf("0\n");
        return 0;
    }
    for(int i=2;i<=1000;i++)if(Judge(i))pri[++cnt] = i;
    Solve(n - 2,1);Solve(n - 2 - tot,-1);
    for(int i=1;i<=n;i++)if(d[i] != -1)Solve(d[i] - 1,-1);
    for(int i=1;i<=cnt;i++){
        for(int j=1;j<=num[i];j++)Mul(pri[i]);
    }
    for(int i=1;i<=n-tot-2;i++)Mul(m);
    Print();
    return 0;
}

1006

#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;

const int Maxn = 100100;

struct node {int to,next;}E[3000010];

int n,m,q[Maxn],d[Maxn],col[Maxn],hash[Maxn],tot,H[Maxn],Ans;
bool vis[Maxn];

void Insert(int u,int v){E[++tot].to = v;E[tot].next = H[u];H[u] = tot;}

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int x,y;scanf("%d%d",&x,&y);
        Insert(x,y);Insert(y,x);
    }
    for(int i=n;i>=1;i--){
        int t = 0;
        for(int j=1;j<=n;j++)if(!vis[j] && d[j] >= d[t])t = j;
        vis[t] = 1;q[i] = t;
        for(int j=H[t];j;j=E[j].next)d[E[j].to]++;
    }
    for(int i=n;i>=1;i--){
        int u = q[i],j;
        for(int k=H[u];k;k=E[k].next)hash[col[E[k].to]] = i;
        for(j=1;;j++)if(hash[j] != i)break;
        col[u] = j;if(j > Ans)Ans = j;
    }
    printf("%d\n",Ans);
    // while(1);
    return 0;
}

手动把空格去掉了看起来比较密集= =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值