cf1187解题报告
cf1187解题报告
A
去掉都有的,剩下的取最大值+1
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int T;
cin>>T;
while(T--) {
int n,s,t;
cin>>n>>s>>t;
int k=s+t-n;
s-=k,t-=k;
int ans=max(s,t)+1;
cout<<ans<<"\n";
}
return 0;
}
B
有点笨的办法,每个字母分别二分,得到的最大值是答案。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=4e5+7;
int n,m,sum[N][26],tong[26];
char s[N];
int main() {
scanf("%d%s",&n,s+1);
for(int i=1;i<=n;++i) {
for(int j=0;j<26;++j) sum[i][j]=sum[i-1][j];
sum[i][s[i]-'a']++;
}
scanf("%d",&m);
for(int i=1;i<=m;++i) {
scanf("%s",s+1);
int len=strlen(s+1),ans=0;
for(int j=0;j<26;++j) tong[j]=0;
for(int j=1;j<=len;++j) tong[s[j]-'a']++;
for(int j=0;j<26;++j) {
int l=1,r=n,tmp=0;
while(l<=r) {
int mid=(l+r)>>1;
if(sum[mid][j]>=tong[j]) tmp=mid,r=mid-1;
else l=mid+1;
}
ans=max(ans,tmp);
}
printf("%d\n",ans);
}
return 0;
}
C
1的区间是相同的个数,能降就降,最后check。
wrong了几发:先n^2判断包含判断NO,然后直接YES,显然是错的。
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int read() {int x;cin>>x;return x;}
int n,m;
vector<pair<int,int> > a[2];
int vis[N],ans[N];
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i) {
int opt=read(),l=read(),r=read();
a[opt].push_back(make_pair(l,r));
}
sort(a[0].begin(),a[0].end());
sort(a[1].begin(),a[1].end());
for(int i=1;i<=n;++i) ans[i]=1;
int js=n<<1,l=0;
for(auto i:a[1]) {
if(i.second<=l) continue;
if(i.first>l) {js--;for(int j=l+1;j<i.first;++j) ans[j]=js--;}
for(int j=i.first;j<=i.second;++j) ans[j]=js;
l=max(i.second,l);
}
while(l+1<=n) ans[++l]=--js;
for(auto i:a[0]) {
int flag=0;
for(int j=i.first+1;j<=i.second;++j)
if(ans[j]!=ans[j-1]) flag=1;
if(!flag) return puts("NO"),0;
}
printf("YES\n");
for(int i=1;i<=n;++i) cout<<ans[i]<<" ";
return 0;
}
D
我感觉D和E反了。
一开始:前后的数字的前面的大于他的相对位置不变。
正确:和一开始差不多?类似冒泡,依次把\(b_i\)的对应的\(a_j\)挪过来,挪的过程中当然是只能和最大的挪。
是区间的最小值。用线段树维护。
#include <bits/stdc++.h>
#define ls rt<<1
#define rs rt<<1|1
using namespace std;
const int N=3e5+7;
int T,n,a[N],b[N];
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
namespace seg {
int mi[N<<2];
void build(int l,int r,int rt) {
if(l==r) return mi[rt]=a[l],void();
int mid=(l+r)>>1;
build(l,mid,ls);
build(mid+1,r,rs);
mi[rt]=min(mi[ls],mi[rs]);
}
int query(int l,int r,int L,int R,int rt) {
if(L<=l&&r<=R) return mi[rt];
int mid=(l+r)>>1;
if(L<=mid&&R>mid) return min(query(l,mid,L,R,ls),query(mid+1,r,L,R,rs));
else if(L<=mid) return query(l,mid,L,R,ls);
else return query(mid+1,r,L,R,rs);
}
void modify(int L,int l,int r,int rt) {
if(l==r) return mi[rt]=0x3f3f3f3f,void();
int mid=(l+r)>>1;
if(L<=mid) modify(L,l,mid,ls);
else modify(L,mid+1,r,rs);
mi[rt]=min(mi[ls],mi[rs]);
}
}
vector<int> T_T[N],OwO[N];
int pos[N];
void solve() {
n=read();
for(int i=1;i<=n;++i) T_T[i].clear(),OwO[i].clear();
for(int i=1;i<=n;++i) a[i]=read(),T_T[a[i]].push_back(i);
for(int i=1;i<=n;++i) b[i]=read(),OwO[b[i]].push_back(i);
for(int i=1;i<=n;++i) if(T_T[i].size()!=OwO[i].size()) return puts("NO"),void();
for(int i=1;i<=n;++i) pos[i]=0;
seg::build(1,n,1);
for(int i=1;i<=n;++i) {
int r=T_T[b[i]][pos[b[i]]++];
if(seg::query(1,n,1,r,1)<b[i]) return puts("NO"),void();
seg::modify(r,1,n,1);
}
return puts("YES"),void();
}
int main() {
T=read();
while(T--) solve();
return 0;
}
E
题目大意:给你一棵白色树,每次选个和黑点的白点,加上他所在白色联通块的贡献,然后染黑。初始点任选。
先求出任意一个点的贡献。然后考虑换根就行了。
\(f[u]=f[v]+n-siz[v]*2\)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+7;
vector<int> G[N];
int n,siz[N],f[N];
void dfs1(int u,int fa) {
siz[u]=1;
for(auto v:G[u]) {
if(v==fa) continue;
dfs1(v,u);
siz[u]+=siz[v];
}
f[1]+=siz[u];
}
void dfs2(int u,int fa) {
for(auto v:G[u]) {
if(v==fa) continue;
f[v]=f[u]+n-siz[v]-siz[v];
dfs2(v,u);
}
}
signed main() {
scanf("%lld",&n);
for(int i=1,u,v;i<n;++i) {
scanf("%lld%lld",&u,&v);
G[u].push_back(v),G[v].push_back(u);
}
dfs1(1,0),dfs2(1,0);
int ans=0;
for(int i=1;i<=n;++i) ans=max(ans,f[i]);
printf("%lld\n",ans);
return 0;
}
cf1187解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- 【WPF】1、 基本控件的简介
WPF一直都是断断续续的使用.偶尔用到一下.但是每次间隔比较长,需要重新学习,就写了这篇日志.以后有问题,看这个就可以了解各大概,然后针对细节再另外想办法. 微软的东西真心好,如果什么都不懂,可以直接 ...
- Debian忘记密码重置
前一阵子因为特殊原因我把一个网站的VPS服务器关闭了,结果竟把SSH密码忘了,也没有使用SSH密钥,因为上面还有网站文件不能选择重装,只能尝试在面板重置,但是面板返回结果一直是404我无法获得重置的密 ...
- Wireshark教程之二:Wireshark捕获数据分析
使用 Wireshark 选择需要抓包的网络方式,并设置过滤器条件,当有数据通信后即可抓到对应的数据包,这里将分析其每一帧数据包的结构. 以HTTP协议为例,一帧数据包一般包括以下几个部分: Fram ...
- 【转载】 C#中手动创建一个DataTable对象并写入数据
在C#操作集合数据的过程中,有时候需要手动创建一个DataTable对象,并手动设置DataTable对象的Columns列名等信息,最后再往手动创建的DataTable对象中写入相应的数据信息,此时 ...
- vue打包后页面显示空白但是不报错
在使用vue打包的时候页面显示空白,并且控制台不报错 设置vue-router的时候mode设置为history模式了,这种模式要有后台的配合,一般还是使用哈希模式就不会出现页面空白了.
- mac下比较好用的svn软件,SVN客户端CornerStone 2.7.10 破解版
一.已经破解,可以直接使用. dmg文件无密码,也不需要注册机.直接使用即可 二. 界面... 三.添加repository 点击左侧栏中REPOSITORY那一栏的+选择添加reposito ...
- 云服务器 - 定时备份MariaDB/MySQL
数据库数据备份尤为重要,而我们不会人工手动去备份,这样会很麻烦,我们都是通过服务器每日自定运行来做的,设置一个定时时间即可 首先我们看一下mysqldump这个文件的位置: 可以看到目录在 /usr/ ...
- python之栈与队列
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...
- linux 提升NFS性能
如何修改同时发起的NFS请求数量 阿里云ecs服务器请查看官方文档 linux上NFS性能只有几MB速度.NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能 ...
- 攻防世界WEB高手进阶之blgdel
CISCN final 打开页面 扫描目录 Robots.txt Config.txt 代码审计 <?php class master { private $path; private $nam ...