牛客练习赛53

比赛链接
https://ac.nowcoder.com/acm/contest/1114#question
题解链接
https://ac.nowcoder.com/discuss/302786?type=101
B
代码如下


C
代码如下

/*

*/
#define method_1
#ifdef method_1
/*

*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define D(x) cout<<#x<<" = "<pii;
const int maxn=1000+5;
const int INF=0x3f3f3f3f;
int n,m,Q;
char s[maxn][maxn];
char tmp[maxn];
bitseta[maxn],b,c,d;
int main() {
//  ios::sync_with_stdio(false);
    //freopen("富豪凯匹配串.in","r",stdin);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%s",s[i]);
        for(int j=0;j

D
代码如下

/*

*/
#define method_1
#ifdef method_1
/*

*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define D(x) cout<<#x<<" = "<pii;
const int maxN=500000+5;
const int maxn=200+5;
const int maxL=2000000+5;
const int maxl=6+5;
const int maxm=84*84*2+5;
const int maxv=999999+5;
const int maxV=9+5;
const int INF=0x3f3f3f3f;
int n,Q;
char str[maxl],tmp[maxL];
struct node{
    int from,to,cap;
}edge[maxm];
int head[maxn],tot,d[maxn],s,t;
int maxflow;
int cnt=0;
int vis[maxv],num[maxn],g[maxn][maxl],c[maxV];
void init(){
    memset(head,0,sizeof(head));
    tot=1;
    memset(c,0,sizeof(c));
}
int calc(){
    int res=0;
    for(int i=0;i<6;i++){
        res=res*10+str[i]-'0';
    }
    return res;
}
void add(int from,int to,int cap){
    edge[++tot].from=head[from],head[from]=tot,edge[tot].to=to,edge[tot].cap=cap;
    edge[++tot].from=head[to],head[to]=tot,edge[tot].to=from,edge[tot].cap=0;
}
queueq;
bool bfs(){
    memset(d,0,sizeof(d));
    while(q.size()) q.pop();
    q.push(s);d[s]=1;
    while(q.size()){
        int x=q.front();q.pop();
        for(int i=head[x];i;i=edge[i].from){
            int y=edge[i].to,cap=edge[i].cap;
            if(cap&&!d[y]){
                d[y]=d[x]+1;
                q.push(y);
                if(y==t) return 1;
            }
        }
    }
    return 0;
}
int dinic(int x,int flow){ 
    if(x==t) return flow;
    int rest=flow,k;
    for(int i=head[x];i&&rest;i=edge[i].from){
        int y=edge[i].to;
        if(edge[i].cap&&d[y]==d[x]+1){
            k=dinic(y,min(rest,edge[i].cap));
            if(!k) d[y]=0;
            edge[i].cap-=k;
            edge[i^1].cap+=k;
            rest-=k;
        }
    }
    return flow-rest;
}
int main() {
    ios::sync_with_stdio(false);
    //freopen("德育分博弈政治课.in","r",stdin);
    scanf("%d%d",&n,&Q);
    for(int i=1;i<=n;i++){
        scanf("%s",str);
        sort(str,str+6);
        int val=calc();
        if(!vis[val]){
            vis[val]=++cnt;
            int temp=val;
            for(int j=0;j<6;j++){
                g[cnt][j]=temp%10;
                temp/=10;
            }
        }   
        num[vis[val]]++;
    }
    s=0,t=cnt+9+1;
    while(Q--){
        init();
        scanf("%s",tmp);
        int len=strlen(tmp);
        for(int i=0;i

E
代码如下

/*

*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define D(x) cout<<#x<<" = "<pii;
const int maxn=500000+5;
const int maxnum=1000000+5;
const int INF=0x3f3f3f3f;
int n,Q,a[maxn],pos[maxnum],d[maxn]; //d[i]表示a[i]左边第一个与它相同的数字的下标 
int ans[maxn];
struct node{
    int L,R,id;
    bool operator<(const node& h)const{return R>1;
    build(rt<<1,l,mid);
    build(rt<<1|1,mid+1,r);
    tr[rt].dat=min(tr[rt<<1].dat,tr[rt<<1|1].dat);
}
void update(int rt,int x,int v){
    if(tr[rt].l==tr[rt].r){
        tr[rt].dat=min(tr[rt].dat,v);
        return;
    }
    int mid=tr[rt].l+tr[rt].r>>1;
    if(x<=mid) update(rt<<1,x,v);
    else update(rt<<1|1,x,v);
    tr[rt].dat=min(tr[rt<<1].dat,tr[rt<<1|1].dat);
}
int query(int rt,int l,int r){
    if(tr[rt].l>=l&&tr[rt].r<=r) return tr[rt].dat;
    int val=INF;
    int mid=tr[rt].l+tr[rt].r>>1;
    if(l<=mid) val=min(val,query(rt<<1,l,r));
    if(mid

你可能感兴趣的:(牛客练习赛53)