zoukankan      html  css  js  c++  java
  • CODE FESTIVAL 2016 qual A题解

    传送门

    不知道为什么(AGC)系列的题里突然多了这些……那就做吧……

    (A)

    什么玩意儿……

    upd:因为没看到最后要加换行居然没有(1A)好气哦……

    const int N=15;
    char s[N];
    int main(){
    	scanf("%s",s+1);
    	fp(i,1,4)putchar(s[i]);
    	putchar(' ');
    	fp(i,5,12)putchar(s[i]);
    	putchar('
    ');
    	return 0;
    }
    

    (B)

    什么玩意儿……

    const int N=1e5+5;
    int a[N],n,res;
    int main(){
    	scanf("%d",&n);
    	fp(i,1,n)scanf("%d",&a[i]);
    	fp(i,1,n)res+=(a[a[i]]==i);
    	printf("%d
    ",res>>1);
    	return 0;
    }
    

    (C)

    什么玩意儿……

    const int N=1e5+5;
    char s[N];int a[N],n,k;
    int main(){
    	scanf("%s%d",s+1,&k),n=strlen(s+1);
    	fp(i,1,n)a[i]=(s[i]-'a');
    	fp(i,1,n)if(a[i]&&k>=26-a[i])k-=26-a[i],s[i]='a';
    	k%=26;
    	s[n]+=k;
    	printf("%s
    ",s+1);
    	return 0;
    }
    

    (D)

    我好蠢啊为什么总是想到开头想不到后面呢……

    首先题中的限制等价于(a_{i,j}-a{i-1,j}=a_{i,j-1}-a_{i-1,j-1}),同理也有(a_{i,j}-a_{i,j-1}=a_{i-1,j}-a_{i-1,j-1})

    那么我们如果存在合法的解,则必定存在两个序列(c_1,...,c_n)(d_1,...,d_m),满足(a_{i,j}=c_i+d_j)

    那么我们把行列看做一个二分图,对于每一个有限定的格子从对应的行向列连边,那么每条边的权值都应该等于它连接的两个点的点权之和。那么对于一个联通块,先(dfs)一遍判断是否合法。之后在考虑如何满足所有点权都非负,这个的话,我们可以找到这个连通块中左边最小的点权(xmn)和右边最小的点权(ymn),如果(xmn+ymngeq 0)就有解了。这个是因为每一次调整肯定是右边所有点权(+1)且左边所有点权(-1)或者反过来,那么如果满足之前的条件肯定可以调整到合法

    //quming
    #include<bits/stdc++.h>
    #define R register
    #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
    #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
    #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
    template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
    template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
    using namespace std;
    typedef long long ll;
    const int N=5e5+5;
    struct eg{int v,nx,w;}e[N<<1];int head[N],tot;
    inline void add(R int u,R int v,R int w){e[++tot]={v,head[u],w},head[u]=tot;}
    ll dis[N],xmn,ymn;int vis[N],vv[N],fl,n,m,c;
    void dfs(int u){
    	vis[u]=1;
    	go(u)if(!vis[v])dis[v]=e[i].w-dis[u],dfs(v);
    		else if(dis[u]+dis[v]!=e[i].w)fl=0;
    }
    void find(int u){
    	vv[u]=1;
    	u<=n?cmin(xmn,dis[u]):cmin(ymn,dis[u]);
    	go(u)if(!vv[v])find(v);
    }
    int main(){
    	scanf("%d%d%d",&n,&m,&c);
    	for(R int i=1,u,v,w;i<=c;++i){
    		scanf("%d%d%d",&u,&v,&w);
    		add(u,v+n,w),add(v+n,u,w);
    	}
    	fp(i,1,n+m)if(!vis[i]){
    		fl=1;dfs(i);if(!fl)return puts("No"),0;
    		xmn=ymn=1e18,find(i);
    		if(xmn+ymn<0)return puts("No"),0;
    	}
    	puts("Yes");
    	return 0;
    }
    

    (E)

    orz 司公子

    首先我们假设已经对于某个序列确定了操作顺序,考虑这个序列最终是什么样子的

    首先没有被操作过的按顺序排在后面,前面的数,我们按操作序列从后往前扫描,越早出现的排在越前面,如果重复出现不用考虑

    那么我们不难发现所有数列最终的样子就是随便选一个序列进行所有操作之后的样子

    那么我们随便选一个序列进行所有操作,然后把结尾那一段极长的递增的序列取出来,那么前面的操作都是必须进行的,只要判断前面的操作序列的个数是否大于等于(n)即可

    //quming
    #include<bits/stdc++.h>
    #define R register
    #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
    #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
    #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
    template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
    template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
    using namespace std;
    const int N=5e5+5;
    int a[N],st[N],pos[N],cnt[N],vis[N];
    int n,m,q,top,p;
    int main(){
    	scanf("%d%d%d",&n,&m,&q);
    	fp(i,1,q)scanf("%d",&a[i]);
    	fd(i,q,1)if(!vis[a[i]])st[++top]=a[i],vis[a[i]]=1;
    	fp(i,1,m)if(!vis[i])st[++top]=i;
    	fp(i,1,m)pos[st[i]]=i;
    	p=m;
    	while(p>1&&st[p-1]<st[p])--p;
    	if(p==1)return puts("Yes"),0;
    	cnt[0]=2333333;
    	fd(i,q,1)if(cnt[pos[a[i]]-1])--cnt[pos[a[i]]-1],++cnt[pos[a[i]]];
    	R int res=0;
    	fp(i,p-1,m)res+=cnt[i];
    	puts(res>=n?"Yes":"No");
    	return 0;
    }
    
  • 相关阅读:
    给pdf文件添加防伪水印logo(附工程源码下载)
    关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)
    那些年用过的一些前端框架
    优化Javascript数据遍历
    PHP5 mysqli 教程
    程序员一年工作经验之谈
    TCP协议的性能评测工具 — Tcpdive开源啦
    VMware Tools (ubuntu系统)安装详细过程与使用
    利用BBRSACryptor实现iOS端的RSA加解密
    Spring AOP详解(转载)
  • 原文地址:https://www.cnblogs.com/yuanquming/p/11470157.html
Copyright © 2011-2022 走看看