10.19NOIP模拟赛(DAY2)



/*
正解O(n)尺取法orz
我写的二分答案。本来以为会被卡成暴力分......
这个-'0'-48是我写的吗........我怎么不记得...
*/
#include<bits\stdc++.h> #define N 1000001
#define inf 0x3f3f3f3f using namespace std;
int n,m,ans,cnt,flag;
char s1[N],s2[N],cur[N];
int vis[][N],v[]; bool judge(int l,int len)
{
for(int i=;i<=cnt;i++)
if(vis[cur[i]-''-][l+len-]-vis[cur[i]-''-][l-]==) return false;
return true;
} int main()
{
freopen("english.in","r",stdin);
freopen("english.out","w",stdout);
scanf("%d",&n);
scanf("%s",s1);
for(int i=;i<n;i++) vis[s1[i]-''-][i]=;
for(int j='a';j<='z';j++) for(int i=;i<=n;i++)
{
if(s1[i]==j) vis[j-''-][i]=vis[j-''-][i-]+;
else vis[j-''-][i]=vis[j-''-][i-];
}
scanf("%s",s2);
int len=strlen(s2);
for(int i=;i<len;i++)
if(!v[s2[i]-''-]) v[s2[i]-''-]=,cur[++cnt]=s2[i];
for(int i=n-len;i<n;i++) if(s1[i]!=s2[i]) flag=;
if(!flag)
{
printf("%d\n",len);
return ;
}
int l,r,mid;ans=n;
for(int i=;i<=n-len;i++)
{
l=,r=ans;
while(l<=r)
{
int mid=(l+r)>>;
if(judge(i,mid)) ans=min(ans,mid),r=mid-;
else l=mid+;
}
if(ans==len) break;
}
printf("%d\n",ans);
fclose(stdin);fclose(stdout);
return ;
}

/*
首先如果数列最大最小差大于1是显然不行
如果都为n-1显然可以
其余情况嘛
有n个人,A说,你们一群人中我看到了3种颜色。B说,我比你牛逼,我看到了四种!
这说明了什么?想一想就能明白,说明颜色一定有4种,并且A头顶上的颜色一定跟所有人不同。
因此所有较小的数都是一种与众不同的颜色,较大的数这个集合里肯定至少两两相同。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define N 1000007 using namespace std;
int n,x,y,ans,cnt1,cnt2;
int a[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("hat.in","r",stdin);
freopen("hat.out","w",stdout);
int T;T=read();
while(T--)
{
n=read();a[]=read();cnt1=;cnt2=;
x=;y=;
for(int i=;i<=n;i++)
{
a[i]=read();
if(a[i]!=a[i-]) x=a[i],y=a[i-];
}
if(x== && y==){printf("Yes\n");continue;}
if(x>y) swap(x,y);
for(int i=;i<=n;i++)
{
if(a[i]==x) cnt1++;
if(a[i]==y) cnt2++;
}
if(cnt1+cnt2!=n)
{
printf("Yes\n");
continue;
}
if(cnt2==) printf("Yes\n");
else if(cnt2/>=y-cnt1) printf("No\n");
else printf("Yes\n");
}
fclose(stdin);fclose(stdout);
return ;
}


/*
严格次小生成树模板
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm> #define Maxn 300010 using namespace std; struct edge
{
int to,w,next;
} p[Maxn];
int head[Maxn/],tot;
void addedge(int a,int b,int c)
{
p[tot].to=b;
p[tot].w=c;
p[tot].next=head[a];
head[a]=tot++;
} struct line
{
int u,v,w;
bool operator<(const line &a)const
{
return w<a.w;
}
} q[Maxn]; int vis[Maxn];
int fa[Maxn/]; int findset(int x)
{
return fa[x]==x?x:(fa[x]=findset(fa[x]));
} int unionset(int a,int b)
{
return fa[findset(a)]=findset(b);
} int dep[Maxn/];
int f[Maxn/][],g[Maxn/][],h[Maxn/][];
void dfs(int u,int fa)
{
f[u][]=fa;
dep[u]=dep[fa]+;
for(int i=head[u]; i!=-; i=p[i].next)
{
int v=p[i].to;
if(v!=fa)
{
g[v][]=p[i].w;
h[v][]=-;
dfs(v,u);
}
}
} void ck1(int &a,int &b,int c,int d,int e,int f)
{
if(c==e)
{
a=c;
b=max(d,f);
return;
}
if(c>e)
{
swap(c,e);
swap(d,f);
}
a=e;
b=max(c,f);
}
int ck2(int lx,int ln,int w)
{
if(w==lx) return w-ln;
return w-lx;
}
void ck3(int &lx,int &ln,int u,int t)
{
if(g[u][t]==lx) ln=max(ln,h[u][t]);
else if(g[u][t]<lx) ln=max(ln,g[u][t]);
else
{
ln=(lx,h[u][t]);
lx=g[u][t];
}
}
void init(int n)
{
dfs(,);
for(int j=; j<; j++)
for(int i=; i<=n; i++)
{
if(!f[i][j]) f[i][j+]=;
else
{
f[i][j+]=f[f[i][j]][j];
ck1(g[i][j+],h[i][j+],g[i][j],h[i][j],g[f[i][j]][j],h[f[i][j]][j]);
}
}
}
int LCA(int u,int v,int w)
{
int lx=-,ln=-;
if(dep[u]<dep[v]) swap(u,v);
int df=dep[u]-dep[v],t=;
while(df)
{
if(df&)
{
ck3(lx,ln,u,t);
u=f[u][t];
}
t++;
df>>=;
}
if(u==v) return ck2(lx,ln,w);
for(int i=; i>=; i--)
{
if(f[u][i]!=f[v][i])
{
ck3(lx,ln,u,i);
ck3(lx,ln,v,i);
u=f[u][i];
v=f[v][i];
}
}
ck3(lx,ln,u,);
ck3(lx,ln,v,);
return ck2(lx,ln,w);
}
int main()
{
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
for(int i=; i<m; i++)
scanf("%d%d%d",&q[i].u,&q[i].v,&q[i].w);
sort(q,q+m);
for(int i=; i<=n; i++) fa[i]=i;
memset(head,-,sizeof head);
memset(vis,,sizeof vis);
tot=;
int cnt=;
long long ans=;
for(int i=; i<m; i++)
{
int u=q[i].u,v=q[i].v;
if(findset(u)==findset(v)) continue;
unionset(u,v);
vis[i]=;
addedge(u,v,q[i].w);
addedge(v,u,q[i].w);
ans+=q[i].w;
if(++cnt==n-) break;
}
init(n);
int z=0x3f3f3f3f;
for(int i=; i<m; i++)
if(!vis[i]) z=min(z,LCA(q[i].u,q[i].v,q[i].w));
cout<<ans+z<<endl;
return ;
}
10.19NOIP模拟赛(DAY2)的更多相关文章
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)
A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...
- [10.18模拟赛] 序列 (DP)
[10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...
- [10.12模拟赛] 老大 (二分/树的直径/树形dp)
[10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- 6.19noip模拟赛总结
昨天进行了noip的模拟赛,我这个蒟蒻又是垫底.... T1 第一感觉就是贪心,从高到低排序,然后每次都将恰好满足当前条件的人数分成一组,然后移动到下一个未分组的单位上,贴代码 #include< ...
- 2018.10.17NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 +100\) 实际得分:\(100 + 100 + 60\) 辣鸡模拟赛.. 5min切掉T1,看了一下T2 T3,感觉T3会被艹爆因为太原了.. 淦了20 ...
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
随机推荐
- python之抽象 2014-4-6
#抽象 8.40am-1.懒惰即美德2.抽象和结构3.创建函数 内建的callable 函数可以判定函数是否可以调用 >>> import math >>> x=1 ...
- python之字符串处理 2014-4-5
#字符串 p62 13:20pm-15:20 上一章讲的所有的序列化操作对于字符串同样适用 不过字符串不可变 所以无法使用分片赋值 1.字符串格式化 >>> format=" ...
- mysql ab主从复制出错及解决过程
一.mysql主从服务器报错描述:Slave_IO_Running=NO,Slave_SQL_Running=YES,Last_Errno=0 mysql slave stop ; mysql sla ...
- Reactor Cooling(无源汇有上下界网络流)
194. Reactor Cooling time limit per test: 0.5 sec. memory limit per test: 65536 KB input: standard o ...
- 营救(洛谷 P1396)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...
- 【51NOD1806】wangyurzee的树(Prufer编码,容斥原理,组合计数)
题意:有n个点和m条限制,每条限制限制了一个点的度数不能为某个数. 求合法的树的个数模10^9+7 n<=10^6 m<=17 思路:WYZ作业 首先m<=17显然是2^m容斥 枚举 ...
- POJ 3680_Intervals
题意: 给定区间和该区间对应的权值,挑选一些区间,求使得每个数都不被K个区间覆盖的最大权值和. 分析: 如果K=1,即为区间图的最大权独立集问题.可以对区间所有端点排序后利用动态规划的方法,设dp[i ...
- Linux下搭建maven私服Nexus 3.2.1-01
1. 私服介绍私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则, ...
- 【Spark】Spark容错机制
引入 一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新. 面向大规模数据分析,数据检查点操作成本非常高,须要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带 ...
- symfony 使用原始sql
$this->get('database_connection')->fetchAll('select * from book where book.id=3')