• GDKOI 2021 TG D1总结


    我们来打钢丝罢!就打提高,先灭了阎老西

    众所周知,众所周知的,众所周知是个众所周知的成语这件事众所周知的非常的众所周知事情已经众所周知。

    某人表示:今天题目比较简单。

    这种事情就很劝退,人无者也。

    菜!

    T1 cut

    模拟一般猜题意,

    贪心只能过样例。

    数学上来先打表,

    啥也不会瞎暴力。

    #include<cstdio>
    #include<algorithm>
    #define N 200010
    using namespace std;
    int n,m,a[N],b[N<<2][2],last,r[N],bl[N],wh[N],p[N],ans,cut[N];
    char BuF[1<<26],*InF=BuF;
    template<typename T>void read(T &x){
    	for(;*InF<33;++InF);
    	for(x=0;32<*InF;x=(x<<3)+(x<<1)+(*InF++^48));
    }
    void add(int x,int y){
    	b[++last][0]=a[x];
    	b[a[x]=last][1]=y;
    }
    bool cmp(int x,int y){
    	return(r[x]>r[y]);
    }
    int main(){
    	freopen("cut.in","r",stdin);
    	freopen("cut.out","w",stdout);
    	fread(BuF,1,1<<26,stdin);
    	read(n);read(m);
    	for(int i=0,x,y;i<m;++i){
    		read(x);read(y);
    		add(x,y);
    		add(y,x);
    		++r[x];++r[y];
    		p[i]=i+1;
    	}
    	sort(p,p+n,cmp);
    	for(int i=0;i<n;++i){
    		for(int j=a[p[i]];j;j=b[j][0]){
    			if(cut[b[j][1]]!=1){
    			    cut[b[j][1]]=-1;
    				++wh[p[i]];
    			}
    		}
    		if(wh[p[i]]>bl[p[i]]){
    		    ans+=wh[p[i]]-bl[p[i]];
    		    cut[p[i]]=1;
    			for(int j=a[p[i]];j;j=b[j][0]){
    				if(cut[b[j][1]]!=1){
                        ++bl[b[j][1]];
                    }
    			}
    			if(ans>=(m>>1)+(m&1)){
    				break;
    			}
    		}
    	}
    	for(int i=1;i<=n;++i){
    		printf("%d ",cut[i]>0);
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    

    T2 busy

    瞎暴力。

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,l,r,a[100010],cnt;
    long long f[20000010];
    char BuF[1<<26],*InF=BuF;
    template<typename T>void read(T &x){
    	for(;*InF<33;++InF);
    	for(x=0;32<*InF;x=(x<<3)+(x<<1)+(*InF++^48));
    }
    int main(){
    	freopen("busy.in","r",stdin);
    	freopen("busy.out","w",stdout);
    	fread(BuF,1,1<<26,stdin);
    	read(n);
    	for(int i=0;i<n;++i){
    		read(a[i]);
    		for(int j=i,mi=a[i];j>=0;mi=min(mi,a[--j])){
    			f[++cnt]=(i-j+1)*mi;
    		}
    	}
    	read(l);read(r);
    	sort(f+1,f+cnt);
    	for(int i=l;i<=r;++i){
    		printf("%lld ",f[i]);
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    

    T3 palindrome

    考试的时候准备先写一个 manacher 然后维护回文长度。

    没错那个准备写树套树的 B 又是我,但因为那啥没写。

    明明是一道很水的二分,你说它为什么呢……

    以下代码正解:

    #include<cstdio>
    #include<iostream>
    #define N 1000010
    using namespace std;
    int q,len=1,p[N],r,mid,f[21][N],log[N];
    char BuF[1<<26],*InF=BuF,s[N];
    template<typename T>void read(T &x){
    	for(;*InF<33;++InF);
    	for(x=0;32<*InF;x=(x<<3)+(x<<1)+(*InF++^48));
    }
    void manacher(){
    	for(register int i=1;i<len;++i){
    		if(i<r){
    			f[0][i]=min(f[0][(mid<<1)-i],r-i);
            }
    		for(;s[i-f[0][i]-1]==s[i+f[0][i]+1];++f[0][i]);
    		if(i+p[i]>r){
    			r=i+p[i];
    			mid=i;
    		}
    	}
    }
    int get(int l,int r){
    	int s=log[r-l+1];
    	return(max(f[s][l],f[s][r-(1<<s)+1]));
    }
    int main(){
    	freopen("palindrome.in","r",stdin);
    	freopen("palindrome.out","w",stdout);
    	fread(BuF,1,1<<26,stdin);
    	for(s[0]='@',s[1]='#';32<*InF;++InF){
    		s[++len]=*InF;
    		s[++len]='#';
    	}
    	manacher();
    	for(int i=2;i<=len;++i){
    	    log[i]=log[i>>1]+1;
        }
    	for(int j=0;j<log[len];++j){
    	    for(int i=1;i+(1<<j)-1<=len;++i){
    	        f[j+1][i]=max(f[j][i],f[j][i+(1<<j)]);
            }
        }
    	read(q);
    	for(register int i=0,x,y;i<q;++i){
    		read(x);read(y);x=(x<<1)-1;y=y<<1|1;
    		int l=1,r=(y-x)>>1;
    		while(l<r){
    			int mid=((l+r)>>1)+1;
    			if(get(x+mid,y-mid)>=mid){
    				l=mid;
    			}else{
    				r=mid-1;
    			}
    		}
    		printf("%d
    ",l);
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    

    T4 night

    模拟尝试猜题意,暴力不会秒放弃。

    勉强指数想拿分,N 方直接只三题。

  • 相关阅读:
    Linux学习之十九-Linux磁盘管理
    Linux学习之十八-sudo分权管理
    Linux学习之十七-配置Linux简单的脚本文件自启动
    Linux系统救援模式应用:恢复误删的系统文件
    Linux学习之十六-Linux用户管理
    Linux学习之十五-Linux文件特殊权限和附加权限
    Linux学习之十四-Linux文件和目录权限
    Linux学习之十三-vi和vim编辑器及其快捷键
    Linux学习之十二-Linux文件属性
    Linux系统救援模式应用:单用户模式找回密码
  • 原文地址:https://www.cnblogs.com/groundwater/p/14346630.html
Copyright © 2020-2023  润新知