就按(博主认为的)难度顺序排吧。

Sort It Out

分析

容易发现选出的集合一定是所有逆序对的一个最小覆盖集,那么剩下的就一定是一个LIS。仔细想想还可以发现字典序第\(k\)小的最小覆盖集的补集一定是字典序第\(k\)大的LIS,所以找到这个序列字典序第\(k\)大的LIS就好了。

代码

#include <bits/stdc++.h>

#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL; using std::cin;
using std::cout;
using std::endl; inline LL read(){
LL x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} const int MAXN=100005;
const LL inf=1e18+1; int n,a[MAXN],bit[MAXN],f[MAXN];
LL k,retcnt,cnt[MAXN],g[MAXN];
bool vis[MAXN]; struct number{
int pos,val,f;LL g;
inline friend bool operator < (number x,number y){
return x.f==y.f?x.val>y.val:x.f>y.f;
}
}b[MAXN]; #define lowbit(x) ((x)&(-(x))) inline void upd(int x,int kk,LL ll){
for(register int i=x;i<=n;i+=lowbit(i)){
if(kk<bit[i]) continue;
else if(kk==bit[i]){
cnt[i]=std::min(cnt[i]+ll,inf);
}
else{
bit[i]=kk;
cnt[i]=ll;
}
}
} inline int ask(int x){
int ret=0;retcnt=1;
for(register int i=x;i;i-=lowbit(i)){
if(bit[i]<ret) continue;
else if(bit[i]==ret){
retcnt=std::min(retcnt+cnt[i],inf);
}
else{
ret=bit[i];
retcnt=cnt[i];
}
}
return ret;
} #undef lowbit(x) int main(){
n=read(),k=read();int ans=0;
rin(i,1,n) a[i]=read();
irin(i,n,1){
f[i]=ask(n-a[i]+1)+1;
g[i]=retcnt;
upd(n-a[i]+1,f[i],g[i]);
b[i]=(number){i,a[i],f[i],g[i]};
ans=std::max(ans,f[i]);
}
ans=n-ans;
std::sort(b+1,b+n+1);
int now=b[1].f,pos=0,las=0;LL temp=0;
rin(i,1,n){
if(b[i].f!=now||b[i].pos<pos||b[i].val<las) continue;
if(temp+b[i].g>=k){
k-=temp;
temp=0;
--now;
pos=b[i].pos;
las=b[i].val;
vis[b[i].val]=true;
}
else{
temp+=b[i].g;
}
}
printf("%d\n",ans);
rin(i,1,n) if(!vis[i]) printf("%d\n",i);
return 0;
}

The Cow Gathering

分析

有一个简单的结论,就是如果\(a\)必须比\(b\)先离开聚会,那么以\(b\)为根\(a\)的子树内的点的答案就一定是\(0\)。

但是明显这样还会有些问题。显然目前所有答案还有可能为\(1\)的点是连通的,因此一些树边的方向可以被确定。如果我们在已经确定了的关系中找到了环,那么说明整张图的所有点的答案就都是\(0\)。

尽管想到了正解但还是各种疑惑,可能之后会在这里补充一点东西。

代码

#include <bits/stdc++.h>

#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL; using std::cin;
using std::cout;
using std::endl; inline LL read(){
LL x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} const int MAXN=100005; int n,m,ecnt,head[MAXN];
int top,sta[MAXN],pos[MAXN],tag[MAXN];
int tot,uu[MAXN<<1],vv[MAXN<<1],deg[MAXN<<1];
bool ok[MAXN];
std::vector<int> vec[MAXN]; struct Edge{
int to,nxt;
}e[MAXN<<1]; inline void add_edge(int bg,int ed){
++ecnt;
e[ecnt].to=ed;
e[ecnt].nxt=head[bg];
head[bg]=ecnt;
} void dfs1(int x,int pre){
sta[++top]=x;
pos[x]=top;
rin(i,0,(int)vec[x].size()-1){
int ver=vec[x][i];
if(!pos[ver]) ++tag[ver];
else{
++tag[1];
--tag[sta[pos[ver]+1]];
}
}
trav(i,x){
int ver=e[i].to;
if(ver==pre) continue;
dfs1(ver,x);
}
--top;
pos[x]=0;
} void dfs2(int x,int pre,int now){
now+=tag[x];
if(!now) ok[x]=true;
trav(i,x){
int ver=e[i].to;
if(ver==pre) continue;
dfs2(ver,x,now);
}
} void dfs3(int x,int pre){
if(pre) ++tot,uu[tot]=pre,vv[tot]=x;
trav(i,x){
int ver=e[i].to;
if(ver==pre) continue;
dfs3(ver,x);
}
} std::queue<int> q; void topo(){
while(!q.empty()) q.pop();
rin(i,1,n) if(!deg[i]) q.push(i);
int cnt=0;
while(!q.empty()){
int x=q.front();q.pop();
++cnt;
trav(i,x){
int ver=e[i].to;
--deg[ver];
if(!deg[ver]) q.push(ver);
}
}
if(cnt<n){
rin(i,1,n) printf("0\n");
exit(0);
}
} int main(){
n=read(),m=read();
rin(i,2,n){
int u=read(),v=read();
add_edge(u,v);
add_edge(v,u);
}
rin(i,1,m){
int u=read(),v=read();
vec[v].push_back(u);
++tot,uu[tot]=v,vv[tot]=u;
}
dfs1(1,0);
dfs2(1,0,0);
int root=0;
rin(i,1,n){
if(ok[i]){
root=i;
break;
}
}
if(!root){
rin(i,1,n) printf("0\n");
return 0;
}
dfs3(root,0);
ecnt=0,memset(head,0,sizeof head);
rin(i,1,tot){
add_edge(uu[i],vv[i]);
++deg[vv[i]];
}
topo();
rin(i,1,n) printf("%d\n",ok[i]?1:0);
return 0;
}

Balance Beam

分析

把期望和凸包结合在了一块,这道题有点神啊。。

贴一个认为讲的不错的博客,本人就不在这里献丑了。

戳我感受大神的洗礼

代码

#include <bits/stdc++.h>

#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL; using std::cin;
using std::cout;
using std::endl; inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} const int MAXN=100005; int n,f[MAXN],sta[MAXN],top;
LL ans[MAXN]; bool isleft(int x1,int y1,int x2,int y2,int x3,int y3){
int X1=x2-x1,Y1=y2-y1,X2=x3-x2,Y2=y3-y2;
return 1ll*X1*Y2-1ll*X2*Y1>=0;
} int main(){
n=read();
rin(i,1,n) f[i]=read();
top=0;sta[++top]=0;
rin(i,1,n+1){
while(top>1&&isleft(sta[top-1],f[sta[top-1]],sta[top],f[sta[top]],i,f[i])) --top;
sta[++top]=i;
}
rin(i,2,top){
rin(j,sta[i-1]+1,sta[i])
ans[j]=(1ll*f[sta[i]]*(j-sta[i-1])+1ll*f[sta[i-1]]*(sta[i]-j))*100000/(sta[i]-sta[i-1]);
}
rin(i,1,n) printf("%lld\n",ans[i]);
return 0;
}

USACO2018DEC PLATINUM的更多相关文章

  1. WordPress Platinum SEO插件跨站脚本漏洞

    漏洞名称: WordPress Platinum SEO插件跨站脚本漏洞 CNNVD编号: CNNVD-201309-398 发布时间: 2013-09-24 更新时间: 2013-09-24 危害等 ...

  2. NDK下 将Platinum SDK 编译成so库 (android - upnp)

    Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...

  3. 基于Platinum库的DMS实现(android)

    接上篇博文:基于Platinum库的DMR实现(android) 文章讲述了如何使用Platinum库实现DMR 今天同样使用该库,来讲解一下DMS的实现 关于该库如何编译,请参考这篇博文:NDK下 ...

  4. 关于Platinum库的MediaRender具体C++代码实现探讨

    接上篇博文 NDK下 将Platinum SDK 编译成so库 (android - upnp) 讲述了如何利用该代码库编译给android程序调用的so库,其中也提到了,在使用sample-upnp ...

  5. Usaco 2019 Jan Platinum

    Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...

  6. Platinum UPnP

    http://www.plutinosoft.com/platinum http://blog.csdn.net/lancees/article/details/9178385 Note that P ...

  7. [转帖]56核Xeon Platinum 9200现身 - 英特尔有史以来最大的CPU封装

    56核Xeon Platinum 9200现身 - 英特尔有史以来最大的CPU封装 https://www.cnbeta.com/articles/tech/835271.htm 当英特尔宣布上周正式 ...

  8. bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解

    辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT 先贴代码,有空再填坑 4409[Usaco2016 Feb]Circular barn #include <io ...

  9. USACO 2015 December Contest, Platinum Problem Max Flow【树链剖分】

    题意比较难理解,就是给你n个点的树,然后给你m个修改操作,每一次修改包括一个点对(x, y),意味着将x到y所有的点权值加一,最后问你整个树上的点权最大是多少. 比较裸的树链剖分了,感谢Haild的讲 ...

随机推荐

  1. %300为0的个数(牛客第四场)-- number

    题意: 给你一串数,问你如题. 思路: 我不是这样的作法,从后往前,先取00,再算%3==0的个数,往前推的时候有递推关系: #define IOS ios_base::sync_with_stdio ...

  2. 使用antd List组件实现轮播图

    import { List, Avatar, Carousel } from 'antd'; import { connect } from 'dva'; import './lamp.less' c ...

  3. python_0基础开始_day10

    第十节 一.函数进阶 动态参数 *a r g s —— 聚合位置参数,动态位置参数 默认返回的是tuple元组 def eat(*args):  # 函数的定义阶段 *聚合(打包)    print( ...

  4. Keras模型训练的断点续训、早停、效果可视化

    训练:model.fit()函数 fit(x=None, y=None, batch_size=None, epochs=, verbose=, callbacks=None, validation_ ...

  5. Postman之获得登录的token,并设置为全局变量

    1.调通登录接口(可以参考上篇博客) 网址:Postman之简单使用 2.粘贴以下代码到Tests中 //把json字符串转化为对象 var data=JSON.parse(responseBody) ...

  6. Elasticsearch入门教程(五):Elasticsearch查询(一)

    原文:Elasticsearch入门教程(五):Elasticsearch查询(一) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...

  7. FreeBSD上编写x86 Shellcode初学者指南

    FreeBSD上编写x86 Shellcode初学者指南 来源 https://www.4hou.com/binary/14375.html 介绍 本教程的目的是帮助你熟悉如何在FreeBSD操作系统 ...

  8. vue组件之子组件和父组件

    在看官网和学习的过程中,有些不明确子组件和父组件的定义,为了方便后期学习和理解去网站上搜索了一下相关的解释 1.使用的地方是父组件,定义的地方是子组件,虽然他们是同一个组件 2.Vue.compone ...

  9. python爬去虎扑数据信息,完成可视化

    首先分析虎扑页面数据 如图我们所有需要的数据都在其中![image.png](1)所以我们获取需要的内容直接利用beaitifulsoupui4``` soup.find_all('a',class_ ...

  10. vs2017新建一个空项目

    我们会发现VS2017的控制台程序创建之后会有一些头文件这和之前的VS的版本不一样之前的都可以选择空项目来避免,下面我们就来介绍方法: 首先我们不要创建新的控制台项目,而是创建桌面向导: 然后我们就可 ...