【ContestHunter】【弱省胡策】【Round6】
KMP/DP+树链剖分+线段树/暴力
今天考的真是……大起大落……
String
QwQ题意理解又出错了……(还是说一开始理解了,后来自己又忘了为什么是这样了?)
反正最后的结果就是……我当成:后面每行只需要和第一行check一下就可以了。
因为那个图真的很像在搞串的匹配啊……一格一格往过移,看能不能匹配
然后不就是每个s[i]对A取一下模,然后KMP?看有多少个位置能匹配咯。。。
(其实这是A=B时的做法)
将原序列增长一倍(复制一遍),对A取模做一遍,然后再对B取模做一遍,看有哪些位置是合法的,统计一下……
然而其实正解可以证明出来当$A \not = B$的时候,可以当A=B做……也就是说,上面那种做法……是可以AC的-_-b
P.S.正解是KMP来找循环节= = n如果可以整除n-next[n],那么循环节长度就是n-next[n]……可匹配长度就是……那么多……啊反正差不多啦
//Round6 A
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=;
/*******************template********************/ int a[N],b[N],c[N],A,B,n,ans,nxt[N];
bool yes[N];
void init(){
n=getint(); A=getint(); B=getint();
F(i,,n) a[i]=getint();
memset(yes,,sizeof yes);
ans=;
}
void KMP(int *s,int n){
int m=n*;
nxt[]=; int j=;
F(i,,n+){
while(j && s[i]!=s[j+]) j=nxt[j];
if (s[i]==s[j+]) j++;
nxt[i]=j;
}
j=;
F(i,,m-){
while(j && b[i]!=s[j+]) j=nxt[j];
if (b[i]==s[j+]) j++;
if (j==n) yes[i]=,j=nxt[j];
}
}
void work(){
F(i,,n) c[i]=b[i]=b[i+n]=a[i]%A;
KMP(c,n);
if (A!=B){
F(i,,n) c[i]=b[i]=b[i+n]=a[i]%B;
KMP(c,n);
}
F(i,n,n*-) ans+=yes[i];
printf("%d\n",ans?ans+:);
}
int main(){
int T=getint();
while(T--){
init();
work();
}
return ;
}
Tree
……30分的做法其实就是直接TreeDP,40~50的做法是线段树维护最大连续子段和,那么满分做法?两者结合……Orzzzzzz
所以就是树链剖分+DP(并没有?其实是贪心?)啊……
Orz zyf,这题代码感觉细节很多啊……
树链剖分一下,权值沿轻链按TreeDP的思路将权值加到fa上面,建出整个线段树……
然后每次修改的时候,先将这个点x到top[x]这一条重链上的ans更新一下(这里重点是maxl,即从左端点开始的最大连续子段和),然后!更新fa[top[x]]的DP值!因为它在线段树上的权值是自身权值+轻链的maxl,怎么搞?区间查询一下top[x]所在的重链的maxl……然后更新。。。【这里我并不知道如何记重链的结尾……因为dfs序记start和end是子树的,所以并不能那样搞。。。zyf的做法是:往出连轻链的时候多++一下dfs_clock,这样就可以将不同的重链断开,(当然是将这些没有编号的空节点的权值置为-INF)
查询的时候……直接出解呗。。。
//Round6 B
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=,INF=;
/*******************template********************/ int head[N],to[N],nxt[N],cnt;
void add(int x,int y){
to[++cnt]=y; nxt[cnt]=head[x]; head[x]=cnt;
to[++cnt]=x; nxt[cnt]=head[y]; head[y]=cnt;
} int n,m,f[N],id[N],v[N],ans;
int pos[N],dfs_clock,fa[N],son[N],size[N],top[N];
struct node{
int max,maxl,maxr;
LL sum;
}t[N];
bool vis[N]; void dfs(int x){
size[x]=; son[x]=;
int mx=;
for(int i=head[x];i;i=nxt[i])
if (to[i]!=fa[x]){
fa[to[i]]=x;
dfs(to[i]);
size[x]+=size[to[i]];
if (size[to[i]]>mx) son[x]=to[i],mx=size[to[i]];
}
}
void connect(int x,int f){
pos[x]=++m; top[x]=f; vis[x]=;
id[m]=x;
if (son[x]) connect(son[x],f);
for(int i=head[x];i;i=nxt[i])
if (!vis[to[i]])
++m,connect(to[i],to[i]);
} #define L (o<<1)
#define R (o<<1|1)
#define mid (l+r>>1)
node maintain(node a,node b){
node ans;
ans.maxl=max((LL)a.maxl,a.sum+b.maxl);
ans.maxr=max((LL)b.maxr,b.sum+a.maxr);
ans.max=max(a.maxr+b.maxl,max(a.max,b.max));
ans.sum=a.sum+b.sum;
return ans;
}
void update(int o,int l,int r,int p,int v){
if (l==r){
t[o].sum+=v;
t[o].maxl=t[o].maxr=t[o].max=max(t[o].sum,(LL));
}else{
if (p<=mid) update(L,l,mid,p,v);
else update(R,mid+,r,p,v);
t[o]=maintain(t[L],t[R]);
}
}
node query(int o,int l,int r,int ql,int qr){
if (l==ql && r==qr) return t[o];
else if (qr<=mid) return query(L,l,mid,ql,qr);
else if (ql>mid) return query(R,mid+,r,ql,qr);
else return maintain(query(L,l,mid,ql,mid),query(R,mid+,r,mid+,qr));
}
void change(int x,int y1,int y2){
while(x){
int y=top[x],z=query(,,m,pos[y],m).maxl;
update(,,m,pos[x],y2-y1);
y1=z; y2=query(,,m,pos[y],m).maxl;
x=fa[top[x]];
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("sub.in","r",stdin);
freopen("sub.out","w",stdout);
#endif
n=getint(); int T=getint();
F(i,,n) v[i]=getint();
F(i,,n){
int x=getint(),y=getint();
add(x,y);
}
dfs(); connect(,);
F(i,,m) if (!id[i]) update(,,m,i,-INF);
F(i,,n) change(i,,v[i]);
while(T--){
int cmd=getint(),x,y;
if (cmd==){
x=getint(), y=getint();
change(x,v[x],y);
v[x]=y;
}else printf("%d\n",t[].max);
}
return ;
}
Transport
……我就无语了……
一开始我想的是二分!然后模拟过程进行判断!然而连样例都过不了……QwQ
仔细想了想好像确实并不满足单调性……会有小的波动……
然后蒟蒻就不会了……实在没办法了,二分的时候边界不是 $L=max\{a[i]\},R=\sum a[i]$ 嘛= =然后我就直接将二分的过程删掉……改成枚举……然后……TM居然就过了……maya我也是惊呆了,这个枚举的上下界明明很大的好吗……如果全都走一遍肯定要T的啊!然而我就是过了……就是这么神奇……>_>
P.S.这个边界 L 还是比较松的,其实应该弄成$max\{ \frac{\sum a[i]}{k}, max(a[i]) \}$ ?
//Round6 C
#include<cstdio>
#include<set>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=;
/*******************template********************/ int n,k,a[N],sum;
multiset<int>s,s2;
multiset<int>::iterator it;
bool check(int c){
if (k*c<sum) return ;
s2=s;
int num;
F(i,,k){
num=c;
do{
if (s2.empty()) return ;
it=s2.lower_bound(num);
if (it==s2.end()) it--;
if (*it>num){
if (it==s2.begin()) break;
else it--;
}
num-=*it;
s2.erase(it);
}while();
}
return s2.empty();
}
void init(){
n=getint(); k=getint();
s.clear();
int L=,R=;
sum=;
F(i,,n){
a[i]=getint();
sum+=a[i]; R+=a[i]; L=max(L,a[i]);
s.insert(a[i]);
}
F(i,L,R)
if (check(i)){
printf("%d\n",i);
return;
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
#endif
int T=getint();
while(T--) init();
return ;
}
【ContestHunter】【弱省胡策】【Round6】的更多相关文章
- 弱省胡策 Magic
弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...
- 【弱省胡策】Round #5 Count
[弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...
- luoguP3769 [CH弱省胡策R2]TATT
luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...
- 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)
DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...
- 【ContestHunter】【弱省胡策】【Round3】(C)
容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...
- 【ContestHunter】【弱省胡策】【Round2】
官方题解:http://wyfcyx.is-programmer.com/posts/95490.html A 目前只会30分的暴力……DP好像很神的样子0.0(听说可以多次随机强行算? //Roun ...
- 【ContestHunter】【弱省胡策】【Round8】
平衡树维护凸壳/三角函数+递推+线段树 官方题解:http://pan.baidu.com/s/1sjQbY8H 洛阳城里春光好 题目大意:(其实出题人已经写的很简短了……直接copy的-_-.sor ...
- 【ContestHunter】【弱省胡策】【Round7】
Prufer序列+高精度+组合数学/DP+可持久化线段树 Magic 利用Prufer序列,我们考虑序列中每个点是第几个插进去的,再考虑环的连接方式,我们有$$ans=\sum_{K=3}^n N^{ ...
- 【ContestHunter】【弱省胡策】【Round5】
反演+FFT+构造+DP 写了这么多tag,其实我一个也不会 A 第一题是反演……数据范围10W,看着就有种要用FFT等神奇算法的感觉……然而蒟蒻并不会推公式,只好写了20+10分的暴力,然而特判30 ...
随机推荐
- 006.SMB之用户管理
一 用户添加 注意: 1 添加samba密码必须已经是系统用户,才能添加为samba用户. 2 samba账户密码可以和系统账号密码不一致(建议设为不同密码). 1.1 smbpasswd [root ...
- 循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...
- 3,EasyNetQ-发布/订阅
一.发布 在发布/订阅模式中的角色是彼此陌生的. 一个发布者只是向世界说这个已经发生了,一位订阅者告诉世界“我在乎这个”. 在这个模型中,没有人关心特定的事件是很好的. 消息可能有一个订阅者,可能有2 ...
- 【WIN10】WIN2D——基本圖形的繪製
DEMO下載地址:http://yunpan.cn/c3iNuHFFAcr8h (提取码:8e48) 先看一個截圖: 繪製了一些基本形狀. DEMO的繪製代碼都非常簡單,不想在博客裡細說了,看代碼更為 ...
- hdu 5762 Teacher Bo 暴力
Teacher Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
- ASP.NET Core 中的框架级依赖注入
https://tech.io/playgrounds/5040/framework-level-dependency-injection-with-asp-net-core 作者: Gunnar P ...
- POP3_收取QQ邮箱邮件的问题
今天纠结了一天的时间,使用pop3协议收取qq邮箱中邮件时,因为一个特别坑爹的问题重新写n次,最后发现是因为qq邮箱设置了独立邮箱密码,必须的用独立邮箱密码登陆才行,/(ㄒoㄒ)/~~!!!! 但今天 ...
- Spring boot整合jsp
这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一 ...
- MikroTik RouterOS 5.x破解工具HunterTik
HunterTik目前网络上流传的版本大概就两个版本2.3.1和2.3.1.1,其实效果基本一致,都是不能破解高版本的RouterOS,比如6.6以后的版本就不行了. 一.安装: 一路回车! 二.可以 ...
- 用AB对Webservice做压力测试
AB工具下载 AB工具介绍见 web压力测试工具 下载ab工具后放到任意目录下,从命令行打开ab.exe 使用以下命令测试Webservice ab -c 100 -n 1000 -p zip.txt ...