• SD省队集训day


    Day-3【游记】

    T2有很多人见过原题,于是把这题换成了T4

    开考先看T1,发现是傻逼题

    发现似乎只有 (27) 种情况,写写就过了样例

    然后看T3,发现不可做

    然后看T4,发现国集论文中讲过

    然后很快建模

    卧槽今天要 (200 ext{pts})

    比较得意,然后没管,估分 (100+0+100=200)

    然后就是下午出分,满怀期待的一看,发现 (200 ext{pts}) 那块并没有我

    害,日常FST,然后往下看

    恐怖的事情发生了,(100sim 200 ext{pts}) 那块也没有我

    卧槽我nm怎么了

    然后发现自己 (55+0+0=55)

    开数据,发现自己T1忽略了几种情况,喜挂 (45)

    然后T2状态压缩错了,正解是压链,我直接全给压了...

    (100) 也没了

    wdnmd,大E了,不讲武德

    Day-3【题解】

    忘记的题面名称

    状态:Accepted | 难度:Easy-

    简单题,赛时只写了 (27) 个串而喜提 (55 ext{pts})

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define N 1000001
    #define M 5001
    #define INF 1100000000
    #define Kafuu return
    #define Chino 0
    #define R register
    #define C const
    #define U unsigned
    #define fx(l,n) inline l n
    #define set(l,n,ty,len) memset(l,n,sizeof(ty)*len)
    #define cpy(f,t,ty,len) memcpy(t,f,sizeof(ty)*len)
    #define int long long
    using namespace std;
    fx(int,gi)(){
    	R char c=getchar();R int s=0,f=1;
    	while(c>'9'||c<'0'){
    		if(c=='-') f=-f;
    		c=getchar();
    	}
    	while(c<='9'&&c>='0') s=(s<<3)+(s<<1)+(c-'0'),c=getchar();
    	return s*f;
    }
    char s[N];
    int T,n,scl[N]={0,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6},MAX=34,ans;
    string sc[N]={"","a","b","c","ab","ac","ba","bc","ca","cb","abc","acb","bac","bca","cab","cba","abcba","acbca","bacab","bcacb","cabac","cbabc","abccba","acbbca","bcaacb","baccab","cabbac","cbaabc","aabbcc","aaccbb","bbccaa","bbaacc","ccbbaa","ccaabb"};
    fx(int,solve)(int now){
    	int point=0,sum=0;
    	for(R int i=0;i<n;i++){
    		if(s[i]==sc[now][point]) point+=1;
    		if(point>=scl[now]) sum+=1,point=0;
    	}
    	return sum;
    }
    signed main(){
    	T=gi();int bf=0;
    	while(T--){
    		n=gi();scanf("%s",s);ans=0;
    		for(R int i=1;i<=MAX;i++) bf=solve(i),ans=max(ans,bf*bf*scl[i]);
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    

    忘记的题目名称

    状态:Accepted | 难度:Medium

    状态压缩错了喜提 (0 ext{pts})

    事实上,我们可以考虑一个球能不能被换到 (1) 号点,也就是说,我们从源点向每个球所代表的点连边,容量为 (1)

    中间不断交换的过程即为对应的两个点进行连边,每次可以交换一个,容量依然为 (1)

    而每个时刻,每个位置的球不会大于,并且也不会小于原来的数,于是我们将上一个阶段向此阶段连边,容量为 (d_i)

    (d_i) 即为每个位置有的球

    于是最后从最后一个阶段的一号点向终点连边,容量为 (infty)

    但是这样的点数过多,会被卡掉

    我们很容易发现原图有很多地方都是以链的形式存在,于是我们只需要将其缩掉即可

    这是一个容易的工作,用一个数组记录上次的位置即可

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define N 100001
    #define M 3050
    #define ST 10001
    #define INF 1100000000
    #define Kafuu return
    #define Chino 0
    #define R register
    #define C const
    #define U unsigned
    #define fx(l,n) inline l n
    #define set(l,n,ty,len) memset(l,n,sizeof(ty)*len)
    #define cpy(f,t,ty,len) memcpy(t,f,sizeof(ty)*len)
    #define int long long
    using namespace std;
    fx(int,gi)(){
    	R char c=getchar();R int s=0,f=1;
    	while(c>'9'||c<'0'){
    		if(c=='-') f=-f;
    		c=getchar();
    	}
    	while(c<='9'&&c>='0') s=(s<<3)+(s<<1)+(c-'0'),c=getchar();
    	return s*f;
    }
    int num=1,head[N],dep[N],depn[N],s,t,T,n,m,d[N],u,v,cur[N],ednm[M][M],ans,up[N],node;
    struct Edge{
    	int na,np,fl;
    }e[N];
    fx(void,add)(int f,int t,int fl){
    	e[++num].na=head[f];
    	e[num].np=t;e[num].fl=fl;
    	head[f]=num;
    }
    fx(void,pad)(int f,int t,int fl){
    	add(f,t,fl);add(t,f,0);
    }
    queue<int>q;
    fx(void,layer)(){
    	set(dep,-1,dep,1);
    	dep[t]=0;depn[0]=1;
    	int f;q.push(t);
    	while(!q.empty()){
    		f=q.front();q.pop();
    		for(int i=head[f];i;i=e[i].na){
    			if(dep[e[i].np]==-1){
    				dep[e[i].np]=dep[f]+1;
    				depn[dep[e[i].np]]+=1;
    				q.push(e[i].np);
    			}
    		}
    	}
    }
    fx(int,pasi)(int now,int rf){
    	if(now==t) return rf;
    	int af=0,tf=0;
    	for(int i=cur[now];i;i=e[i].na){
    		cur[now]=i;
    		if(!e[i].fl) continue;
    		if(dep[e[i].np]==dep[now]-1){
    			af=pasi(e[i].np,min(e[i].fl,rf));
    			if(af){
    				e[i].fl-=af;e[i^1].fl+=af;
    				rf-=af,tf+=af;
    			}
    			if(!rf) return tf;
    		}
    	}
    	depn[dep[now]]-=1;
    	if(!depn[dep[now]]) dep[s]=2*t+1;
    	depn[++dep[now]]++;
    	return tf;
    }
    signed main(){
    	T=gi();
    	while(T--){//1-n,n+1-2n,2n+1,2n+2
    		set(head,0,head,1);set(depn,0,depn,1);ans=0;num=1;
    		n=gi(),m=gi();s=ST*2+1;t=s+1;
    		for(R int i=1;i<=n;i++) d[i]=gi(),up[i]=i;
    		for(R int i=1;i<=n;i++) pad(s,up[i],1);
    		for(R int i=1;i<=m;i++){
    			u=gi(),v=gi();
    			pad(up[u],n+i*2-1,d[u]);
    			pad(up[v],n+i*2,d[v]);
    			pad(n+i*2-1,n+i*2,1);
    			pad(n+i*2,n+i*2-1,1);
    			up[u]=n+i*2-1,up[v]=n+i*2;
    		}
    		
    		pad(up[1],t,d[1]);
    		layer();
    		while(dep[s]<2*t+1){
    			cpy(head,cur,head,1);
    			ans+=pasi(s,INF);
    		}
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    

    忘记的题目名称

    状态:Unaccepted | 难度:Hard

    对于连通块分基环树和普通树分别处理,需要闵和然后维护凸包,然后不会了

    不可做

    Day-3【补题】

    补题的题解并不放在这里,具体来说,它放在了题目泛刷记录3

  • 相关阅读:
    页面跳转
    获取gridview 某列的值
    C#日期格式化的几种处理方法(转)
    asp.net 退出 按钮
    asp.net控件大全(一)
    导出Excel
    DropDownList的二级联动 (SqlDataSource实现和SQL 绑定实现)
    asp.net控件大全(二)
    如何让Gridview在没有数据的时候显示表头(asp.net)
    自定义日期格式
  • 原文地址:https://www.cnblogs.com/zythonc/p/14727689.html
Copyright © 2020-2023  润新知