NOIP 模拟七 考试总结
T1匹配
签到大水题,这里有hash,kmp,ac自动机,还有后缀数组,后缀自动机任您挑选.
不过这个数据范围有些坑啊,re就很不爽.做法我还是比较倾向hash的,毕竟不论神魔字符算法,hash大都能莽过(我才不会说kmp忘了呢............)
code
#include<bits/stdc++.h>
using namespace std;
unsigned long long hash1[210001],hash2[210001],len[210000],ji;
int T,la,lb;
char a[210000];
inline bool check(int len1)
{ if(len1==0)return 1;
return hash1[len1]==hash2[lb+1]-hash2[lb+1-len1]*len[len1];
}
int main()
{ //freopen("c.in","r",stdin);
scanf("%d",&T);
len[0]=1;
for(int i=1;i<=200110;++i)len[i]=len[i-1]*131;
while(T--)
{ char s;
scanf("%d%d",&la,&lb);
scanf("%s",a+1);
scanf(" %c",&s);
for(int i=1;i<=la;++i)
{ hash1[i]=hash1[i-1]*131+a[i]-'a';
if(i<=lb)
hash2[i]=hash2[i-1]*131+a[i]-'a';
if(i==lb+1)
hash2[i]=hash2[i-1]*131+s-'a';
}
if(la<lb+1)hash2[lb+1]=hash2[lb]*131+s-'a';
int l=0,r=min(la,lb+1);
for(int i=r;i>=0;--i)
if(check(i)){printf("%d\n",i);break;}
}
}
T2回家
tarjan板子题.可惜我割点不会.现在倒是会了,暴搜就AC了.
code
#include<bits/stdc++.h>
using namespace std;
int T,n,m,cnt,tot,dfn[500010],low[500010],head[500010],ans;
bool bo[500010],vis[500010];
struct jjj
{int to,next;}bian[1000100];
inline void add(int u,int v)
{ bian[++cnt].to=v;
bian[cnt].next=head[u];
head[u]=cnt;
}
inline void tarjan(int x)
{ dfn[x]=low[x]=++tot;
for(int i=head[x];i;i=bian[i].next)
{ int v=bian[i].to;
if(!dfn[v])
{ tarjan(v);
low[x]=min(low[x],low[v]);
if(low[v]>=dfn[x] and x!=1 and bo[v])
{ vis[x]=1;
++ans;
}
if(bo[v])bo[x]=1;
}
else
low[x]=min(low[x],dfn[v]);
}
}
inline void clear()
{ memset(head,0,sizeof(head));
memset(bo,0,sizeof(bo));
memset(vis,0,sizeof(vis));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
cnt=0;tot=0;ans=0;
}
int main()
{ scanf("%d",&T);
while(T--)
{ clear();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{ int a,b;
scanf("%d%d",&a,&b);
if(a==b)continue;
add(a,b);add(b,a);
}
bo[n]=1;
tarjan(1);
cout<<ans<<endl;
for(int i=1;i<=n;++i)
if(vis[i])printf("%d ",i);
cout<<endl;
}
}
T3寿司
不想多说什么,考场上又看错题啦.其实已经搞出O(n)前缀后缀维护了,但就是没jb看环.
遇到环,退环成链.对于不同断点的链,你可以去二分,可以三分,可以O(1)查询直接取中点.单调性显然的,不再证明了,这个题主要是预处理麻烦,一个大串,你只能去O(n)预处理,且用到的还是中间一段,真是麻烦,搞前缀的前缀,还得减去前缀,还得减去前面R对后面B的贡献.我用了8个数组维护数据,大神都是两个就搞定,我太菜了.
搞了一下午,发现预处理时有个数组忘了加一,我TMD气啊.断网之后才是考验代码能力之时啊,自己想自己码就是爽.
code 有点丑,常数飞天
#include<bits/stdc++.h>
#define N 2100001
#define m(x) memset(x,0,sizeof(x))
using namespace std;
char a[N];
int r,b,T;
long long lb[N],rb[N],rib[N],hl[N],lib[N],hr[N],ans=9999999999999999,zhi=0,len,zuob[N],youb[N];
int jir,jib;
inline long long minn(long long a,long long b)
{ if(a<b)return a;
return b;
}
inline long long check(int qi,int i)
{return lib[i]-lib[qi-1]-hl[qi-1]*(zuob[i]-zuob[qi-1])+rib[i+1]-rib[len+qi]-hr[len+qi]*(youb[1+i]-youb[len+qi]);}
inline void work(int qi)
{ int mid=(qi-1+qi-1+len)>>1;
ans=minn(ans,check(qi,mid));
}
int main()
{ freopen("c.in","r",stdin);
scanf("%d",&T);
while(T--)
{ r=0;b=0;jir=0;jib=0;ans=999999999999999;
m(lb);m(rb);m(zuob);m(youb);m(hr);m(hl);m(rib);m(lib);
scanf("%s",a+1);
len=strlen(a+1);
for(int i=1;i<=len;++i)a[i+len]=a[i];
for(int i=1;i<=2*len;++i)
{ if(a[i]=='B')lb[i]=hl[i]=r,zuob[i]=zuob[i-1]+1;
if(a[i]=='R')++r,hl[i]=hl[i-1]+1,zuob[i]=zuob[i-1];
}
r=0;
for(int i=2*len;i;--i)
{ if(a[i]=='B')rb[i]=hr[i]=r,youb[i]=youb[i+1]+1;
if(a[i]=='R')++r,hr[i]=hr[i+1]+1,youb[i]=youb[i+1];
}
for(int i=1;i<=2*len;++i)lib[i]+=lib[i-1]+lb[i];
for(int i=2*len;i;--i)rib[i]+=rib[i+1]+rb[i];
for(int i=1;i<=len;++i)
work(i);
printf("%lld\n",ans);
}
}
NOIP 模拟七 考试总结的更多相关文章
- 【noip模拟】考试总结
今天睡了14个小时啊 把一星期的觉都补回来了 要不是被叫醒了 我肯定还在睡觉- - 其实现在还想睡... 集训真是伤身啊 感觉再睡就要睡成sb了 鉴于昨天被完虐(真·完虐 怒垫底) 来写篇总结 得分: ...
- NOIP 模拟 6 考试总结
T1 这道题是一道裸的暴力,考场写挂了 \(5pts\) 原因竟是忘了删注释,难受 题解 T2 这道题是一道启发式合并,没想出来,拿了个暴力分跑了 题解 T3 这道题就是一道数学期望,想出来就水得很, ...
- NOIP 模拟九 考试总结
T1 考场上先干的T2,最后慌慌张张没去想正解,打算把树建起来,拿70分的部分分,于是写树剖LCA,板子好像忘了,回忆了好久还模拟了好几遍才打对树剖LCA............期望70,结果0.考试 ...
- NOIP 模拟 七十七
100+60+95+30; T4 一个变量打错挂了40.. T1 最大或 考虑从高到低枚举的二进制位,然后和的对应二进制位进行比较.如果两 者相同,那么不论怎么选择,,答案在这个位置上的值一定和在这个 ...
- NOIP 模拟 10 考试总结
T1 一道很妙的题,打暴力分也很多,但是考试的时候忘开 long long 了. 题解 T2 一道挺水的题,不过...(打挂了) 题解 T3 此题甚妙,转化真多,不过对思维是一个非常大的扩展 题解 考 ...
- NOIP 模拟 七十一
最后一场多校模拟赛,好像是信心赛??不过考的不行..最近难题比较多,对题目的难度把握不够好,经常出现简单题跳过的现象. 100+100+20+40 T1 签到题(qiandao) 如果一个点的度数不是 ...
- NOIP 模拟六 考试总结
T1辣鸡 T1就搞得这莫不愉快.. 大致题意是给你几个矩形,矩形覆盖的点都标记上,每个矩形无重复部分,求满足(x,y) (x+1,y+1)都标记过的点对数,范围1e9. 看起来很牛的样子,我确实也被1 ...
- NOIP 模拟一 考试总结
序列 考场上信心满满的打了nlogn的做法,我以为我稳了.据考试结束1h时发现看错题目了,打成了不连续的子序列.匆匆改了n2logn的做法.考试结束后,我发现我跪了.原来到终点才会发现我做的和人家不是 ...
- 2016.11.6 night NOIP模拟赛 考试整理
题目+数据:链接:http://pan.baidu.com/s/1hssN8GG 密码:bjw8总结: 总分:300分,仅仅拿了120份. 这次所犯的失误:对于2,3题目,我刚刚看就想到了正确思路,急 ...
随机推荐
- LeetCoded第20题题解--有效的括号
有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...
- ProjectEuler 007题
题目:By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is ...
- LeetCode通关:连刷三十九道二叉树,刷疯了!
分门别类刷算法,坚持,进步! 刷题路线参考:https://github.com/youngyangyang04/leetcode-master 大家好,我是拿输出博客来督促自己刷题的老三,这一节我们 ...
- Linux centos7 scp命令
1. 命令简介 scp(secure copy) 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令,可以在两台 Linux 主机进行复制操作 # 语法 scp [-1246BCpqr ...
- Python中的文件处理和数据存储json
前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...
- 磁盘“Seagate”没有被推出,因为一个或多个程序可能正在使用它。
推出移动硬盘失败,解决方案: 执行 lsof /Volumes/Seagate/ 可以看到哪些进程在占用磁盘 $ lsof /Volumes/Seagate/ COMMAND PID USER FD ...
- Python之requests模块-session
http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制.requests也提供了相应的方法去操纵它们. requests中的session对象能够让我们跨http请求 ...
- [考试总结]noip模拟46
脑袋确实是不好使了需要回家暴颓治疗 数数数树鼠树 真好玩. 数数 大水题一个,妥妥的签到题目,然后... 我没签上 气展了!!! 其实我还是想麻烦了. 就是我们实际上就是排序之后每一次找头上和尾巴上的 ...
- 硕盟SM-A44|USB3.0转RJ45千兆网口转换器(TYPE A USB3.0 TO RJ45)
硕盟SM-A44是一款USB3.0转RJ45千兆网口转换器.,转换USB端口到以太网端口.它让你投入低成本就可以轻松拥有千兆以太网.可将网络连接到台式机,笔记本电脑等等设备.硕盟 USB千兆网卡采用嵌 ...
- Python - poetry(4)管理环境
环境隔离 poetry 核心之一:使项目环境隔离,意味着始终和本地全局 Python 环境隔离 poetry 首先会检查当前项目是否在虚拟环境中运行:如果是将直接使用它,而不创建新的:如果不是,poe ...