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)的更多相关文章

  1. 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 ...

  2. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)

    还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ...

  3. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)

    随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...

  4. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T3(贪心)

    是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cs ...

  5. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T2(模拟)

    题目要求很简单,做法很粗暴 直接扫一遍即可 注意结果会爆int #include <cstdio> #include <algorithm> #include <cstr ...

  6. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)

    就是找一下规律 但是奈何昨天晚上脑子抽 推错了一项QwQ 然后重新一想 A掉了QwQ #include <cstdio> #include <algorithm> #inclu ...

  7. 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 ...

  8. 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] Swap操作显然只能对(i-1,i)执行才有用. 不然直接将i翻转以及j翻转 显然比直接交换更优. 那么现在我们就相当于有两种操作. ...

  9. 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) B】Reach Median

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 将数组排序一下. 考虑中位数a[mid] 如果a[mid]==s直接输出0 如果a[mid]<s,那么我们把a[mid]改成s ...

随机推荐

  1. ubuntu中mysql中文乱码及用python3.x调用

    首先声明解决方法也是网上找来的,知识自己记下来以防以后用到.   ubuntu版本是14.04使用apt-get命令安装mysql sudo apt-get install mysql-server ...

  2. java学习路线-从入门到入土

    以下是个人学习路线,资源等我找到了 share,如果没找到请自行百度: 1.javase 观看 毕向东的 javase ,主要是老毕口才略屌,听着不容易打瞌睡,冷不丁吓你一大跳 老毕的年代久远,我已经 ...

  3. NP难问题求解综述

    NP难问题求解综述 摘要:定义NP问题及P类问题,并介绍一些常见的NP问题,以及NP问题的一些求解方法,最后最NP问题求解的发展方向做一些展望.   关键词:NP难问题 P类问题 算法 最优化问题   ...

  4. LINQ 查询

    概述 事实上,对于LINQ to Objects来说,就是通过为IEnumerable<T>接口定义了一组约50个扩展方式来实现的. Lambda表达式(拉姆达表达式,Lambda Exp ...

  5. Linux 网卡流量查看

    网卡流量查看 watch more /proc/net/dev # 实时监控流量文件系统 累计值 iptraf # 网卡流量查看工具 nethogs -d 5 eth0 eth1 # 按进程实时统计网 ...

  6. C 语言结构体之点运算符( . )和箭头运算符( -> )的区别

    很多时候,在对结构体进行相应的编码时,时而发现是用点运算符( . ),时而是用箭头运算符( -> ):那么这两者之间的使用有什么区别么? 相同点:两者都是二元操作符,而且右边的操作数都是成员的名 ...

  7. MySQL ODBC 驱动安装

    一.在线安装 1.yum在线安装驱动 # yum -y install unixODBC # yum -y install mysql-connector-odbc 2.配置驱动 (1)查看驱动程序相 ...

  8. GBDT理解

    一.提升树 提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法.以决策树为基函数的提升方法称为提升树,boosting tree.对分类问题的决策树是二叉分类树,对回归问题的决策树是二叉回归 ...

  9. 【mongoDB】 分享系列

    mongoDB 作为一个非关系性数据库(功能很像关系型数据库) MongoDB 之一 MongoDB是什么 MongoDB 之二 增-删-改-查 MongoDB 之三 数据类型 MongoDB 之四 ...

  10. 自定义Web组件

    一.Session 1.面向对象基础 面向对象中通过索引的方式访问对象,需要内部实现 __getitem__ .__delitem__.__setitem__方法 +? 1 2 3 4 5 6 7 8 ...