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: 题目中的难点就是每次折叠的点可能应经 ...
随机推荐
- Fiddler基本用法:手机抓包
from:https://blog.csdn.net/gld824125233/article/details/52588275 电脑最好是笔记本,这样能和手机保持统一局域网内:其他不多说,直接说步骤 ...
- Leetcode 147.对链表进行排序
对链表进行插入排序 对链表进行插入排序. 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表. 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它 ...
- noip模拟赛 经营与开发
题目描述 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发) ...
- cdq分治入门--BZOJ3262: 陌上花开
n<=100000个人,每个人三个属性Ai,Bi,Ci,一个人i的等级为Ai>=Aj,Bi>=Bj,Ci>=Cj的人数,求每个等级有多少人. 裸的三维偏序.按照常规思路,一维排 ...
- ACM组队安排-——杭电校赛(递推)
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #in ...
- Remove Duplicates from Sorted List (链表)
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- laravel event
事件监听 方法一: web.php Event::listen('eloquent.created: App\post',function(){ dump('A post was created'); ...
- SSH端口自定义
SSH的服务端口是22,可以定义成其他端口号, / etc/ssh/sshd_config #ssh-server配置文件位于 /etc/init.d/ssh start #重启SSH服务,
- excel2010英文大写怎么变小写
excel大写转小写步骤如下: 1.如下图所示,若要对字母进行大.小写转换可以使用如下的步骤. 2.若要将单元格中的所有字母全部转换为大写形式,可以使用UPPER函数. 公式为 =UPPER(A2) ...
- Num 15: NYOJ: 题目0002 : 括号配对问题 [ 栈(stack) ]
原题连接 首先要了解有关栈的一些基本知识,即: 什么是栈,栈有什么作用: 1.什么是栈: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...