[USACO 2018 Open Gold] Tutorial
Link:
A:
对于每一条分割线,设本不应在其左侧的个数为$x$
重点要发现每次一来一回的操作恰好会将一对分别应在左/右侧的一个数从右/左移过去
这样就转直接用树状数组求出最大的$x$即可
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=1e5+;
//res至少为1
int n,bit[MAXN],res=;P dat[MAXN]; void Update(int x)
{while(x<=n) bit[x]++,x+=x&(-x);}
int Query(int x)
{
int ret=;
while(x) ret+=bit[x],x-=x&(-x);
return ret;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&dat[i].X),dat[i].Y=i;
sort(dat+,dat+n+); for(int i=;i<n;i++)
Update(dat[i].Y),res=max(res,i-Query(i));
printf("%d",res);
return ;
}
Problem A
冒泡排序相关题多考虑数与数相对位置以及每个数应在的位置
B:
发现答案具有单调性后首先想到二分答案或是直接枚举
由于不用重复建图,直接枚举看起来能更快一些,不过好像并不能在线$O(logn)$判断是否出现了环……
(按照杨主力的指示还是在google上搜到了论文,不过并不打算学,传送门)
剩下就是优先队列套拓扑排序就行了
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
#define pb push_back
typedef long long ll;
typedef pair<int,int> P;
typedef double db;
const int MAXN=1e5+;
vector<int> dat[MAXN];
struct edge{int nxt,to;}e[MAXN<<];
int n,m,num,x,head[MAXN],res[MAXN],in[MAXN],tot; void add_edge(int x,int y)
{e[++tot].nxt=head[x];e[tot].to=y;head[x]=tot;}
void build(int x)
{
tot=;
memset(in,,sizeof(in));
memset(head,,sizeof(head));
for(int i=;i<=x;i++)
for(int j=;j<dat[i].size()-;j++)
add_edge(dat[i][j],dat[i][j+]),in[dat[i][j+]]++;
}
bool check()
{
int sz=;
priority_queue<int,vector<int>,greater<int> > q;
for(int i=;i<=n;i++)
if(!in[i]) q.push(i);
while(!q.empty())
{
int t=q.top();q.pop();
res[++sz]=t;
for(int i=head[t];i;i=e[i].nxt)
{
in[e[i].to]--;
if(!in[e[i].to]) q.push(e[i].to);
}
}
return (sz==n);
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d",&num);
for(int j=;j<=num;j++)
scanf("%d",&x),dat[i].pb(x);
} int l=,r=m;
while(l<=r)
{
int mid=(l+r)>>;
build(mid);
if(check()) l=mid+;
else r=mid-;
}
build(r);check();
for(int i=;i<=n;i++)
printf("%d ",res[i]);
return ;
}
Problem B
C:
明显0/1分数规划,每次$dp$找当前重量大于等于$m$的最大权值和即可
一篇很好的博客,图解0/1分数规划:传送门
顺便学了下$Dinkelbach$算法,发现就是每次找到最大值时直接跳到该方案的零点处
直到该方案的零点为当前$x$下的最大值时停止即可
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef long long ll;
typedef pair<int,int> P;
typedef double db;
const int MAXN=1e5+;
int n,m,w[MAXN],t[MAXN];
db l,r,a[MAXN],dp[MAXN]; bool check(db x)
{
for(int i=;i<=n;i++)
a[i]=t[i]-1.0*x*w[i];
for(int i=;i<=m;i++) dp[i]=-1e9; for(int i=;i<=n;i++)
for(int j=m;j>=;j--)
dp[min(m,j+w[i])]=max(dp[min(m,j+w[i])],dp[j]+a[i]);
return dp[m]>=;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d%d",&w[i],&t[i]),r+=t[i]; while(fabs(l-r)>1e-)
{
db mid=(l+r)/2.0;
if(check(mid)) l=mid;
else r=mid;
}
printf("%d",int((l+r)*));
return ;
}
Problem C
[USACO 2018 Open Gold] Tutorial的更多相关文章
- [USACO 2018 Feb Gold] Tutorial
Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bit ...
- [USACO 2018 Jan Gold] Tutorial
Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...
- [USACO 2017 Dec Gold] Tutorial
Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...
- [USACO 2017 Open Gold] Tutorial
Link: 传送门 A: 由于每个颜色只染色一次就确定了所有要染色的区间 要求染色的次数其实就是求区间最多嵌套多少层,如果有区间相交则无解 以上操作明显可以将左端点排序后用栈来维护 #include ...
- [USACO 2017 Feb Gold] Tutorial
Link: 传送门 A: 分层图最短路(其实就是最短路转移时多记录一维的数据 #include <bits/stdc++.h> using namespace std; #define X ...
- [USACO 2017 Jan Gold] Tutorial
Link: 传送门 A: 按值大小插入后用树状数组统计两边个数 #include <bits/stdc++.h> using namespace std; #define X first ...
- [USACO 2016 Dec Gold] Tutorial
Link: 传送门 A: 贪心从小到大插入,用并查集维护连通性 #include <bits/stdc++.h> using namespace std; #define X first ...
- 【二分+拓扑排序】Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348
目录 Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 MEA ...
- USACO 2006 November Gold Corn Fields
USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...
随机推荐
- Html5学习1(Html属性、Html CSS:)
Html属性 1.Html要求使用小写属性. Html标题 1.确保将Html标题标签只用于标题.不要仅仅为了生成粗体或大号的文本而使用标题. 2.<hr>标签在Html页面中创建水平线, ...
- Spring的BeanFactory体系结构(一)
本文使用的代码是: Spring 3.0 接 触Spring也有很长一段时间了.但是,每次都是直接使用Spring直接提供的API,时间久了,自然也会想探索Spring里面的奥秘.今天上 午,整理出了 ...
- xctf一道反序列化题
题目地址:http://120.24.86.145:8006/test1/ 右键get源码: <?php $user = $_GET["txt"]; $file = $_GE ...
- Python模块学习 - pyinotify
pyinotify介绍 pyinotify模块用来监测文件系统的变化,依赖于Linux内核的inotify功能,inotify是一个事件驱动的通知器,其通知接口从内核空间到用户空间通过三个系统调用.p ...
- peewee在flask中的配置
# 原文:https://blog.csdn.net/mouday/article/details/85332510 Flask的钩子函数与peewee.InterfaceError: (0, '') ...
- KVM虚拟机建立快照
部分转载: http://blog.csdn.net/gg296231363/article/details/6899533 windows虚拟机默认镜像格式为raw,快照默认格式为qcow2.win ...
- Perl中文件读取操作
Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216
- [How to]使用自定义cell进行tableview的创建,适用于cell样式不发生变化的情况。
1.简介 在tableview中又默认的cell格式,其中组织如下: <截取自官网文档> 最终的在页面上默认的cell也只能像上述那样的显示效果,如果这种要是无法满足我们的界面要求,那么我 ...
- awk常见操作整理(更新)
awk的基本结构 awk 'BEGIN{} pattern {} END {}' #pattern {} 部分是针对每行进行循环处理的,有pattern表示对匹配到的行处理,没有pattern表示对所 ...
- node起server--axios做前端请求----进行CORS--跨域请求
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从 ...