博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20161026模拟赛解题报告
阅读量:5913 次
发布时间:2019-06-19

本文共 3075 字,大约阅读时间需要 10 分钟。

20161026模拟赛解题报告

By shenben

T1

按照题目说的模拟即可

但这题有一个神坑:25个字母都已经一一对应完毕后,剩下的两个字母默认对应 

T2

所有的逆序对之间都会连边,求最大独立点集。 

表面上是个图论题,其实是个LIS

Onlogn)求最长上升子序列的长度即可AC

T3

第一次手贱,用链表存边,这是一个稠密图啊!!应该用邻接矩阵啊。

明明可以用floyed跑,非要dfs乱搞。结果10分。玩砸了吧。

最后只改到了40分。

网上的题解(没看懂):

首先这是一个神奇的图,叫做竞赛图。大概定义就是每两点之间都有且仅有一条有向边,看这题就非常好理解了。 

竞赛图有一个很好的性质:只要存在环,环中点的个数就一定大于等于3个。 
证明: 
根据定义,一元环和二元环显然不存在。 
于是考虑多元环:

我们知道在26之间会有一条边,如果这条边从2指向6,那么就形成了1-2-6三元环,否则我们会发现原本的六元环变成了6-2-3-4-5组成的五元环,环变小了 

当这个环缩小到四元环时,显然24之间的连线无论是哪个方向都会形成三元环。

证毕。 

然后我们的思路就清晰了:找到一个环,然后按照上述方式即可输出结果。 
找环的方式则可以采用dfs 
选定一个mark[i]=−1(没有被遍历过)的点,以它为根向下dfs,将沿途上的点mark值设为1,若再次访问则就找到环了。 

T1代码(100分)

#include
#include
#include
#include
using namespace std;const int N=1e4+10;char s[N],a[N],b[N],f[N];bool vis[N];int Q[N>>2],q[N>>2];int lena,lenb,lens;void Go_special(){ int p=0; for(int i='a';i<='z';i++) if(!vis[i]){p=i;break;} vis[p]=1; for(int i=0;i

T2代码(100分)

#include
#include
#include
using namespace std;inline const int read(){ register int x=0,f=1; register char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f;}const int N=1e5+10;int n,len,a[N],b[N];int main(){ freopen("sort.in","r",stdin); freopen("sort.ans","w",stdout); n=read(); for(int i=1;i<=n;i++) a[i]=read(); b[len=1]=a[1]; for(int i=2,pos;i<=n;i++){ if(a[i]>b[len]){ b[++len]=a[i]; } else{ pos=lower_bound(b+1,b+len+1,a[i])-b; b[pos]=a[i]; } } printf("%d",len); return 0;}/*int n,ans,a[N];vector
p[N];void deal(int x){ int cnt=unique(p[x].begin(),p[x].end())-p[x].begin(); ans+=n-1-cnt;}int main(){ freopen("sh.txt","r",stdin); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=n;i++){ for(int j=n;j>i;j--){ if(a[j]

T3代码(40分)

#include
using namespace std;const int N=1e5+10;struct node{ int v,next;}e[N<<1];int n,tot,qi,head[N];char mp[N];int ans[4],sans[4]={
9,9,9,9};bool flag,sflag; void add(int x,int y){ e[++tot].v=y; e[tot].next=head[x]; head[x]=tot;}void record(){ sflag=1; for(int i=1;i<=3;i++) if(ans[i]>sans[i]) return ; for(int i=1;i<=3;i++) sans[i]=ans[i];}void dfs(int x,int de){ if(de==3){ for(int i=head[x];i;i=e[i].next) if(e[i].v==qi){ans[de]=x;record();break;} return ; } for(int i=head[x];i;i=e[i].next){ ans[de]=x; dfs(e[i].v,de+1); }}int main(){ freopen("game.in","r",stdin); freopen("game.ans","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",mp+1); for(int j=1;j<=n;j++){ if(mp[j]=='1') add(i,j); } } for(int i=1;i<=n;i++) dfs(qi=i,1); if(sflag) for(int i=1;i<=3;i++) printf("%d ",sans[i]); else puts("-1"); return 0;}

转载于:https://www.cnblogs.com/shenben/p/6000712.html

你可能感兴趣的文章
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
查看>>
GoLang 变量作用域
查看>>
聊聊 DisplayObject 的x/y/regX/regY/rotation/scale/skew 属性
查看>>
JavaFX “即时搜索” 示例
查看>>
MongoDB分片+复制集
查看>>
vue 将echarts封装为组件一键使用
查看>>
Raffi Krikorian 为“在运行中进行架构重写”提供了指南
查看>>
OneAPM挂牌新三板,续写ITOM新篇章
查看>>
终极指南:如何使用Visual Studio Code进行 Java 开发?
查看>>
通过源码解析 Node.js 中一个 HTTP 请求到响应的历程
查看>>
做了一点事,学到了一些
查看>>
CodeIgniter的密码处理论
查看>>
深入Mysql - 谈谈我对数据类型的认识
查看>>
Tsuru 1.7.0-rc4 发布,基于 Docker 的 PaaS 框架
查看>>
Apache HBase 2.1.3 发布,分布式数据库
查看>>
微信端H5开发整体解决方案
查看>>
Python之retrying
查看>>
OWASP 10 大 Web 安全问题在 JEE 体系完全失控
查看>>
洛谷 P1640 BZOJ 1854 [SCOI2010]连续攻击游戏
查看>>
如何理解Unity组件化开发模式
查看>>