Manthan, Codefest 18 (Div 1 + Div 2) (A~E)
Codeforces 1037
F之后的先不做了...
A.Packets
logn+1,没细想,反正对。
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
int n=read(),x=0;
for(; n; n>>=1,++x);
printf("%d\n",x);
return 0;
}
B.Reach Median
//写法麻烦了
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5;
int n,s,A[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
n=read(),s=read();
for(int i=1; i<=n; ++i) A[i]=read();
std::sort(A+1,A+1+n);
int p=(n+1)/2; long long ans=0;
if(A[p]>s)
{
int p2=p;
for(int i=1; i<p; ++i) if(A[i]>s) {p2=i; break;}
for(int i=p2; i<=p; ++i) ans+=A[i]-s;
}
else if(A[p]<s)
{
int p2=p;
for(int i=n; i>p; --i) if(A[i]<s) {p2=i; break;}
for(int i=p; i<=p2; ++i) ans+=s-A[i];
}
printf("%I64d\n",ans);
return 0;
}
C.Equalize
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=1e6+5;
int n;
char A[N],B[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
n=read();
scanf("%s%s",A+1,B+1);
int ans=0;
for(int i=1; i<n; ++i)
if(A[i]!=B[i])
if(A[i+1]!=B[i+1]&&A[i]==B[i+1]) std::swap(A[i],A[i+1]), ++ans;
else ++ans;
if(A[n]!=B[n]) ++ans;
printf("%d\n",ans);
return 0;
}
D.Valid BFS
用个set队列,模拟一波BFS。
#include <set>
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5;
int n,sz[N],A[N],Enum,H[N],nxt[N<<1],to[N<<1];
std::set<int> st[N];
bool vis[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AddEdge(int u,int v)
{
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
bool Solve()
{
if(A[1]!=1) return 0;
int h=1,t=1,now=2; vis[1]=1;
for(int i=H[1]; i; i=nxt[i]) st[1].insert(to[i]);
while(now<=n && h<=t)
{
int x=A[now++]; if(vis[x]) return 0;
if(!st[h].count(x)) return 0;
++t, ++sz[h], vis[x]=1;
for(int i=H[x]; i; i=nxt[i]) if(!vis[to[i]]) st[t].insert(to[i]);
if(st[t].empty()) --t;
if(sz[h]==st[h].size()) ++h;
}
return now>n;
}
int main()
{
n=read();
for(int i=1; i<n; ++i) AddEdge(read(),read());
for(int i=1; i<=n; ++i) A[i]=read();
puts(Solve()?"Yes":"No");
return 0;
}
比赛结束后
E.Trips(正难则反)
要保证答案集合中的每个点到集合内点的连边至少有k条。正序不好更新,考虑倒序。
添加完所有边后,删掉度数不足k的点,每成功删一个点,如果其邻接点也在答案集合中,将其度数减一再尝试删它然后删它的邻接点...
邻接点当然要用set存。。复杂度\(O(n\log n)\)。
当时还想了下倒着做,还立马觉得不行。。
//343ms 40100KB
#include <set>
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5;
int n,m,K,Enum,H[N],to[N<<1],nxt[N<<1],dgr[N],Ans[N];
bool del[N];
std::set<int> ans,E[N];
std::pair<int,int> e[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AddEdge(int u,int v,int i)
{
E[u].insert(v), E[v].insert(u);
e[i]=std::make_pair(u,v), ++dgr[u], ++dgr[v];
}
void Delete(int x)
{
del[x]=1, ans.erase(x);
int v;
for(std::set<int>::iterator it=E[x].begin(); it!=E[x].end(); ++it)
if(!del[v=*it] && --dgr[v]<K) Delete(v);
}
int main()
{
n=read(), m=read(), K=read();
for(int i=1; i<=m; ++i) AddEdge(read(),read(),i);
for(int i=1; i<=n; ++i) ans.insert(i);
for(int i=1; i<=n; ++i) if(!del[i]/*!!*/&&dgr[i]<K) Delete(i);
for(int i=m,u,v; i; --i)
{
Ans[i]=ans.size(), u=e[i].first, v=e[i].second;
if(!del[u]&&!del[v])//都没被删这条边才存在
{
if(--dgr[u]<K) Delete(u);
else if(--dgr[v]<K) ++dgr[u]/*不判pre会重复删*/, Delete(v);
// if(--dgr[u]<K) Delete(u,v);
// if(--dgr[v]<K && !del[v]/*!!*/) Delete(v,u);
}
E[u].erase(v), E[v].erase(u);
}
for(int i=1; i<=m; ++i) printf("%d\n",Ans[i]);
return 0;
}
Manthan, Codefest 18 (Div 1 + Div 2) (A~E)的更多相关文章
- Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C D
C - Equalize #include<bits/stdc++.h> using namespace std; using namespace std; string a,b; int ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)
还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)
随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T3(贪心)
是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cs ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T2(模拟)
题目要求很简单,做法很粗暴 直接扫一遍即可 注意结果会爆int #include <cstdio> #include <algorithm> #include <cstr ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)
就是找一下规律 但是奈何昨天晚上脑子抽 推错了一项QwQ 然后重新一想 A掉了QwQ #include <cstdio> #include <algorithm> #inclu ...
- Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D,E
D. Valid BFS? time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] Swap操作显然只能对(i-1,i)执行才有用. 不然直接将i翻转以及j翻转 显然比直接交换更优. 那么现在我们就相当于有两种操作. ...
- 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) B】Reach Median
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 将数组排序一下. 考虑中位数a[mid] 如果a[mid]==s直接输出0 如果a[mid]<s,那么我们把a[mid]改成s ...
随机推荐
- [转载]使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)
http://www.cnblogs.com/benbenkoala/archive/2009/03/11/1407793.html 引言:SQL Server的事务日志传送备份是仅次于镜像的高可靠性 ...
- unbind()清除指定元素绑定效果
定义和用法 unbind() 方法移除被选元素的事件处理程序. 该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行. ubind() 适用于任何通过 jQuery 附加的事件 ...
- MySQL管理工具MySQL Utilities — 介绍与安装(1)
MySQL Utilities介绍 MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括: 管理工具 (克隆.复制.比较.差异.导出.导入) 复制工具 (安装.配 ...
- Shell脚本中实现切换用户并执行命令操作【转】
第一种方法 cat test.sh #!/bin/bashsu - test <<EOFpwd;exit;EOF 执行结果图: 第二种方法 当然也可以用下面的命令来执行 复制代码代码如下: ...
- linux使用badblocks命令扫描硬盘排除故障(待验证)
检查硬盘是否产生坏道并输出# badblocks -s -v -o /root/badblocks.log /dev/sda //公司操作 -s Show the p ...
- spring boot JPA中实体类常用注解
spring boot jpa中的注解很多,参数也比较多.没必要全部记住,但是经常查看官方文档也比较麻烦,记录一下一些常用的注解.通过一些具体的例子来帮助记忆. @Entity @Table(name ...
- ACM-ICPC 2018年北京网络赛 D-80 days
题意: n个城市环形连接,初始有c的钱,每到i城市,会获得a[i]的金钱,失去b[i]的金钱,问能否走遍这n个城市,且过程中金钱不为负数,输出起始城市,如果答案有多个,输出最小的数字. 思路:a[i] ...
- 织梦任意页面调用{dede:field.content/}的方法
过滤掉所有的html代码,只显示文字,具体的ID自己更改. 代码如下: {dede:sql sql='Select content from dede_arctype where id=1'} [fi ...
- 微信小程序Http高级封装 es6 promise
公司突然要开放微信小程序,持续蒙蔽的我还不知道小程序是个什么玩意. 于是上网查了一下,就开始着手开发..... 首先开发客户端的东西,都有个共同点,那就是 数据请求! 看了下小程序的请求方式大概和a ...
- 【LOJ】 #2308. 「APIO2017」商旅
题解 分数题可以想到分数规划,我们预处理出从i到j卖什么货物赚的最多,然后把每条边的边权改成"利润 - 效率 × 时间" 用spfa找正环即可 代码 #include <bi ...