传送门

不知道为什么\(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('\n');
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\n",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\n",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+ymn\geq 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;
}

CODE FESTIVAL 2016 qual A题解的更多相关文章

  1. CODE FESTIVAL 2016 qual C题解

    传送门 \(A\) 什么玩意儿-- const int N=105; char s[N];int n,f1,f2; int main(){ scanf("%s",s+1),n=st ...

  2. CODE FESTIVAL 2016 qual B题解

    传送门 \(A\) 什么玩意儿-- const char t[]={"0CODEFESTIVAL2016"}; char s[25];int res; int main(){ sc ...

  3. 【AtCoder】CODE FESTIVAL 2016 qual B

    CODE FESTIVAL 2016 qual B A - Signboard -- #include <bits/stdc++.h> #define fi first #define s ...

  4. 【AtCoder】CODE FESTIVAL 2016 qual A

    CODE FESTIVAL 2016 qual A A - CODEFESTIVAL 2016 -- #include <bits/stdc++.h> #define fi first # ...

  5. 【AtCoder】CODE FESTIVAL 2016 qual C

    CODE FESTIVAL 2016 qual C A - CF -- #include <bits/stdc++.h> #define fi first #define se secon ...

  6. Atcoder CODE FESTIVAL 2016 qual C 的E题 Encyclopedia of Permutations

    题意: 对于一个长度为n的排列P,如果P在所有长度为n的排列中,按照字典序排列后,在第s位,则P的value为s 现在给出一个长度为n的排列P,P有一些位置确定了,另外一些位置为0,表示不确定. 现在 ...

  7. CODE FESTIVAL 2017 qual A 题解

    补一发A的题解. A - Snuke's favorite YAKINIKU 题意: 输入字符串S,如果以YAKI开头输出Yes,否则输出No. #include<bits/stdc++.h&g ...

  8. CODE FESTIVAL 2016 Grand Final 题解

    传送门 越学觉得自己越蠢--这场除了\(A\)之外一道都不会-- \(A\) 贪心从左往右扫,能匹配就匹配就好了 //quming #include<bits/stdc++.h> #def ...

  9. CODE FESTIVAL 2017 qual B 题解

    失踪人口回归.撒花\^o^/ 说来真是惭愧,NOI之后就没怎么刷过题,就写了几道集训队作业题,打了几场比赛还烂的不行,atcoder至今是蓝名=.= 以后还是多更一些博客吧,我可不想清华集训的时候就退 ...

随机推荐

  1. 8 search中的timeout参数

    默认的search,是没有时间限制的.比如,一个search,可能要10分钟才能搜完,那么,es就会等10分钟,直到结果出来.   然而,在某些场景下,客户是等不了10分钟的.比如,电商网站,客户宁可 ...

  2. Swift之xib模块化设计

    一.解决问题 Xib/Storybarod可以方便.可视化的设置约束,在开发中也越来越重要.由于Xib不能组件化,使得封装.重用都变得不可行.本文将介绍一种解决方案,来实现Xib组件化. 二.模型块原 ...

  3. php生成一维码以及保存-转载

    地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/04/21/2460944.html 注释掉: //header('Content-Type: i ...

  4. 解决远程连接数据库:Host is not allowed to connect to this MySQL server

    远程连接数据时,报以下提示: Host 'web1' is not allowed to connect to this MySQL server 原因是数据库服务不允许远程登录,没有授权导致,解决方 ...

  5. Android笔记(六十五) android中的动画——属性动画(propertyanimation)

    补间动画只能定义起始和结束两个帧在“透明度”.“旋转”.“倾斜”.“位移”4个方面的变化,逐帧动画也只能是播放多个图片,无法满足我们日常复杂的动画需求,所以谷歌在3.0开始,推出了属性动画(prope ...

  6. Kubernetes-Istio之Gateway和VirtualService

    1: 确定入口IP和端口 执行以下命令以确定Kubernetes集群是否在支持外部负载均衡器的环境中运行: kubectl get svc istio-ingressgateway -n istio- ...

  7. Centos7启动流程及systemd中Nginx启动配置

    Centos7启动流程: 1.post(Power-On-Self-Test) 加电自检 主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主 ...

  8. vue中8种组件通信方式, 值得收藏!

    vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式, 就 ...

  9. 使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()

    java编程里有关约定:如果两个对象根据equals方法比较是相等的,那么调用这两个对象的任意一个hashcode方法都必须产生相同的结果. hashcode()和equals()都继承于object ...

  10. Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数

    Spark中Task,Partition,RDD.节点数.Executor数.core数目的关系和Application,Driver,Job,Task,Stage理解 from:https://bl ...