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: 题目中的难点就是每次折叠的点可能应经 ...
随机推荐
- Texture 纹理贴图
基础贴图Shader:只有纹理 1. 在属性中声明纹理贴图: _MainTex ("Texture", 2D) = "white" {} 2. 在Pass中声明 ...
- 【转】Asp.net MVC Comet推送
原文链接:http://www.cnblogs.com/kissdodog/p/4283485.html 一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发 ...
- Java面向对象学习-----类的成员变量
类的成员变量: 猜数字游戏:一个类A有一个成员变量v,通过随机产生一个100内的整数给v赋值.定义一个方法,对A类的成员变量v进行猜. 没有猜对的情况下提示如果大了则提示大了,小了则提示小了,并且 ...
- 关于OPENSSL的EVP函数的使用
4月份没什么做,就是做了OPENSSL的 加密和解密的应用,现在公开一下如何调用OPENSSL对字符串进行加密和解密,当中也学会了对加密数据进行BASE64编码,现在公开一下代码,在这感谢GITHUB ...
- [luoguP1044] 栈(数论?)
传送门 卡特兰数 代码 #include <cstdio> int n; long long f[20]; int main() { int i; scanf("%d" ...
- 593. Valid Square
Problem statement: Given the coordinates of four points in 2D space, return whether the four points ...
- [bzoj1112][POI2008]砖块Klo_非旋转Treap
砖块Klo bzoj-1112 POI-2008 题目大意:$N$柱砖,希望有连续$K$柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖 ...
- cogs——8. 备用交换机
8. 备用交换机 ★★ 输入文件:gd.in 输出文件:gd.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直 ...
- session问题总既然(深入理解)&Token问题理解&sso单点登陆理解实现
一.Session使http协议成为有状态协议(浏览器cookie本地这个session,服务器端也有这个session) 1.ajax前端登陆无法保存session,造成无法维持登陆状态(http本 ...
- 使用gdb调试python程序
参考文章:https://mozillazg.com/2017/07/debug-running-python-process-with-gdb.html https://blog.alswl.com ...