zoukankan      html  css  js  c++  java
  • Codeforces Round #541 (Div. 2) (A~F)


    Codeforces 1131

    比赛链接

    hack一个暴力失败了两次最后还是没成功身败名裂= = CF跑的也太快了吧...
    不过倒也涨了不少。

    A.Sea Battle

    //想麻烦了,但是无所谓...
    #include <set>
    #include <map>
    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    #define mp std::make_pair
    #define pr std::pair<int,int>
    #define pc putchar
    #define gc() getchar()
    typedef long long LL;
    
    inline int read()
    {
    	int now=0,f=1;register char c=gc();
    	for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    	for(;isdigit(c);now=now*10+c-48,c=gc());
    	return now*f;
    }
    LL c(LL a,LL b)
    {
    	return ((a+4+b)<<1)-4;
    }
    
    int main()
    {
    	LL w1=read(),h1=read(),w2=read(),h2=read();
    	LL ans=c(w1,h1)+c(w2,h2)-((std::min(w1,w2)+2)<<1);
    	printf("%d
    ",ans);
    
    	return 0;
    }
    

    B.Draw!

    //有点不知道说什么...看代码吧...
    #include <set>
    #include <map>
    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    #define mp std::make_pair
    #define pr std::pair<int,int>
    #define pc putchar
    #define gc() getchar()
    typedef long long LL;
    const int N=1e5+5;
    
    int A[N],B[N];
    
    inline int read()
    {
    	int now=0,f=1;register char c=gc();
    	for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    	for(;isdigit(c);now=now*10+c-48,c=gc());
    	return now*f;
    }
    
    int main()
    {
    	int n=read();
    	for(int i=1; i<=n; ++i) A[i]=read(),B[i]=read();
    	LL ans=0;
    	for(int i=1,las=0; i<=n; ++i)
    	{
    		int x=std::max(A[i-1],B[i-1]),y=std::min(A[i],B[i]);
    		x=std::max(x,las), las=y+1;
    		ans+=std::max(y-x+1,0);
    	}
    	printf("%I64d
    ",ans);
    
    	return 0;
    }
    

    C.Birthday

    sort一下从中间往左右依次分配。没证,但感觉就是对的。

    //31ms	0KB
    #include <set>
    #include <map>
    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    #define mp std::make_pair
    #define pr std::pair<int,int>
    #define pc putchar
    #define gc() getchar()
    typedef long long LL;
    const int N=1e3+5;
    
    int A[N],B[N];
    
    inline int read()
    {
    	int now=0,f=1;register char c=gc();
    	for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    	for(;isdigit(c);now=now*10+c-48,c=gc());
    	return now*f;
    }
    
    int main()
    {
    	int n=read();
    	for(int i=1; i<=n; ++i) A[i]=read();
    	std::sort(A+1,A+1+n);
    	int mid=n+1>>1; B[mid]=A[1];
    	for(int i=3,t=mid-1; i<=n; i+=2) B[t--]=A[i];
    	for(int i=2,t=mid+1; i<=n; i+=2) B[t++]=A[i];
    	for(int i=1; i<=n; ++i) printf("%d ",B[i]);
    
    	return 0;
    }
    

    D.Gourmet choice(拓扑排序)

    容易想到拓扑一下分配数字。对于等号,就先把它们合并成一个连通块,再拓扑。
    不合法情况就是同一连通块中出现了><

    //61ms	43900KB
    #include <set>
    #include <map>
    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #define mp std::make_pair
    #define pr std::pair<int,int>
    #define pc putchar
    #define gc() getchar()
    typedef long long LL;
    const int N=1e6+5,M=1e3+5;
    
    int dgr[N],bel[N],fa[N],Ans[N];
    char s[M][M];
    struct Graph
    {
    	int Enum,H[N],nxt[N],to[N];
    	inline void AE(int u,int v,int f)
    	{
    		dgr[v]+=f, to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
    	}
    }G,T;
    
    inline int read()
    {
    	int now=0,f=1;register char c=gc();
    	for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    	for(;isdigit(c);now=now*10+c-48,c=gc());
    	return now*f;
    }
    int Find(int x)
    {
    	return x==fa[x]?x:fa[x]=Find(fa[x]);
    }
    bool Check(int n,int m,int cnt)
    {
    	static int q[N];
    	int tot=n+m,h=0,t=0;
    	for(int i=1; i<=n; ++i)
    		for(int j=1; j<=m; ++j)
    			if(bel[i]==bel[j+n]&&s[i][j]!='=') return 0;
    	for(int i=1; i<=cnt; ++i) if(!dgr[i]) q[t++]=i, Ans[i]=1;
    	while(h<t)
    	{
    		int x=q[h++];
    		for(int i=T.H[x],v; i; i=T.nxt[i])
    		{
    			v=T.to[i], Ans[v]=std::max(Ans[v],Ans[x]+1);
    			if(!--dgr[v]) q[t++]=v;
    		}
    	}
    	if(t<cnt) return 0;
    	puts("Yes");
    	for(int i=1; i<=n; ++i) printf("%d ",Ans[bel[i]]);
    	puts("");
    	for(int i=n+1; i<=tot; ++i) printf("%d ",Ans[bel[i]]);
    	return t==cnt;
    }
    
    int main()
    {
    	int n=read(),m=read(),tot=n+m;
    	for(int i=1; i<=tot; ++i) fa[i]=i;
    	for(int i=1; i<=n; ++i)
    	{
    		scanf("%s",s[i]+1);
    		for(int j=1; j<=m; ++j)
    			if(s[i][j]=='>') G.AE(j+n,i,0);
    			else if(s[i][j]=='<') G.AE(i,j+n,0);
    			else fa[Find(i)]=Find(j+n);
    	}
    	int cnt=0;
    	for(int i=1; i<=tot; ++i) if(fa[i]==i) bel[i]=++cnt;
    	for(int i=1; i<=tot; ++i) if(fa[i]!=i) bel[i]=bel[Find(i)];
    	for(int x=1; x<=tot; ++x)
    		for(int i=G.H[x],v; i; i=G.nxt[i])
    			if(bel[x]!=bel[v=G.to[i]]) T.AE(bel[x],bel[v],1);
    	if(!Check(n,m,cnt)) puts("No");
    
    	return 0;
    }
    

    E.String Multiplication(思路)

    从后往前对最后一个字符串(p_n)的前后缀是否相同讨论一下。具体看这里吧不想写了= =
    可以像上面那样递归去做,也可以从(p_1)往后递推。因为用到的是某个字符的最长连续子串,所以令(f[i][j])表示(p_1cdot p_2cdot...cdot p_i)(j)字符的最长连续长度,转移时判一下(p_{i+1})是否都是由(j)字符构成的,是就用(len imes(f[i][j]+1)+f[i][j])更新,否则用(1+j字符的最长前后缀)更新((p_{i-1})中含(j)字符才能转移)。
    复杂度(O(sum|p_i|))(递归)或(O(26sum|p_i|))(递推)(然而前者常数比较大)。

    //46ms	10100KB
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define S 26
    typedef long long LL;
    const int N=1e5+5;
    
    int f[N][S],pre[S],suf[S];
    char s[N];
    
    void Solve(int *f)
    {
    	scanf("%s",s+1);
    	int l=strlen(s+1);
    	for(int j=0; j<S; ++j)
    	{
    		int mx=0;
    		for(int i=1,cnt=0; i<=l; ++i)
    			if(s[i]==j+'a') mx=std::max(mx,++cnt);
    			else cnt=0;
    		f[j]=mx, pre[j]=suf[j]=0;
    		for(int i=1; i<=l; ++i)
    			if(s[i]==j+'a') ++pre[j];
    			else break;
    		for(int i=l; i; --i)
    			if(s[i]==j+'a') ++suf[j];
    			else break;
    	}
    }
    
    int main()
    {
    	int n; scanf("%d",&n);
    	Solve(f[1]);
    	for(int i=2; i<=n; ++i)
    	{
    		Solve(f[i]);
    		int l=strlen(s+1);
    		for(int j=0; j<S; ++j)
    			if(f[i-1][j])
    				if(pre[j]!=l) f[i][j]=std::max(f[i][j],pre[j]+suf[j]+1);
    				else f[i][j]=std::max(f[i][j],l*(f[i-1][j]+1)+f[i-1][j]);
    	}
    	int ans=0;
    	for(int i=0; i<S; ++i) ans=std::max(ans,f[n][i]);
    	printf("%d
    ",ans);
    
    	return 0;
    }
    

    F.Asya And Kittens(链表)

    容易发现只要模拟一下按顺序合并连通块即可。可以用vector+启发式合并,也可以链表。用链表复杂度(O(nalpha(n)))

    //78ms	1600KB
    #include <set>
    #include <map>
    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    #define mp std::make_pair
    #define pr std::pair<int,int>
    #define pc putchar
    #define gc() getchar()
    typedef long long LL;
    const int N=150005;
    
    int fa[N],R[N],ed[N];
    
    inline int read()
    {
    	int now=0,f=1;register char c=gc();
    	for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    	for(;isdigit(c);now=now*10+c-48,c=gc());
    	return now*f;
    }
    int Find(int x)
    {
    	return x==fa[x]?x:fa[x]=Find(fa[x]);
    }
    
    int main()
    {
    	int n=read();
    	for(int i=1; i<=n; ++i) fa[i]=ed[i]=i;
    	for(int i=1; i<n; ++i)
    	{
    		int x=read(),y=read();
    		int r1=Find(x),r2=Find(y);
    		fa[r2]=r1, R[ed[r1]]=r2, ed[r1]=ed[r2];
    	}
    	for(int i=1; i<=n; ++i)
    		if(fa[i]==i)
    		{
    			for(int x=i; x; x=R[x]) printf("%d ",x);
    			break;
    		}
    
    	return 0;
    }
    

    G.Most Dangerous Shark

    待填坑(怕是永远也填不上了)

    
    
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/SovietPower/p/10425364.html
Copyright © 2011-2022 走看看