USACO 2016 US Open Contest, Gold解题报告
1.Splitting the Field
http://usaco.org/index.php?page=viewproblem2&cpid=645
给二维坐标系中的n个点,求ans=用一个矩形覆盖所有点所用矩形面积-用两个矩形覆盖所有点所用两个矩形的最小面积和,而且两个矩形不能重合(边重合也不行)
枚举两个矩形的分割线,也就是把所有点分成两个部分,枚举分割点;先预处理每个点之前和之后的最大,最低高度
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 50015
#define down(i,r,l) for(int i=r;i>=l;i--)
#define rep(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long ll;
int l[N],r[N],l1[N],r1[N],n;
ll zs,ans;
struct node{int x,y;}s[N];
bool cmp(node x,node y) {return x.x==y.x?x.y<y.y:x.x<y.x;}
void getans() {
ll now;
sort(s+,s++n,cmp);
memset(l,,(n+)<<); memset(l1,,(n+)<<); memset(r,,(n+)<<); memset(r1,,(n+)<<);
rep(i,,n) l[i]=min(l[i-],s[i].y),r[i]=max(r[i-],s[i].y);
down(i,n,) l1[i]=min(l1[i+],s[i].y),r1[i]=max(r1[i+],s[i].y);
rep(i,,n) {
now=(ll)(s[i-].x-s[].x) * (ll)(r[i-]-l[i-]) + (ll)(s[n].x-s[i].x) * (ll)(r1[i]-l1[i]);
ans=min(ans,now);
}
}
int main ()
{
int miny,minx,maxx,maxy;
miny=minx=,maxy=maxx=;
scanf("%d",&n); rep(i,,n)
{
scanf("%d%d",&s[i].x,&s[i].y),miny=min(miny,s[i].y),maxy=max(maxy,s[i].y);;
maxx=max(maxx,s[i].x); minx=min(minx,s[i].x);
}
ans=(ll)(maxy-miny)*(ll)(maxx-minx),zs=ans;
getans();
rep(i,,n) swap(s[i].x,s[i].y);
getans();
printf("%lld\n",zs-ans);
}
2.Closing the Farm
http://usaco.org/index.php?page=viewproblem2&cpid=646
离线+并查集
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#define N 200020
#include<vector>
using namespace std;
int n,m,a[N],f[N];
bool vis[N],ok[N];
vector<int>G[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,a,b;i<=m;i++)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
for(int i=;i<=n;i++)
scanf("%d",&a[i]),f[i]=i;
int cnt=;
for(int i=n;i;i--)
{
int u=a[i];
cnt++;vis[u]=;
for(int j=;j<G[u].size();j++)
{
int v=G[u][j];
if(!vis[v])continue;
int fa=find(u),fb=find(v);
if(fa!=fb)
{
if(fa>fb)swap(fa,fb);
f[fb]=fa;
cnt--;
}
}
if(cnt==)ok[i]=;
}
for(int i=;i<=n;i++)
if(ok[i])printf("YES\n");
else printf("NO\n");
}
3.248
http://usaco.org/index.php?page=viewproblem2&cpid=647#
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=3e5+;
int n,ans,a,f[][maxn];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a);
f[a][i]=i+;
}
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
{
if(!f[i][j])f[i][j]=f[i-][f[i-][j]];
if(f[i][j])ans=max(i,ans);
}
printf("%d",ans);
return ;
}
USACO 2016 US Open Contest, Gold解题报告的更多相关文章
- USACO 2016 February Contest, Gold解题报告
1.Circular Barn http://www.usaco.org/index.php?page=viewproblem2&cpid=621 贪心 #include <cstd ...
- USACO 2016 January Contest, Gold解题报告
1.Angry Cows http://www.usaco.org/index.php?page=viewproblem2&cpid=597 dp题+vector数组运用 将从左向右与从右向左 ...
- 【二分+拓扑排序】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 Section1.4 Mother's Milk 解题报告
milk3解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section1.2 Name That Number 解题报告
namenum解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
- USACO Section1.1 Friday the Thirteenth 解题报告
friday解题报告 —— icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...
- USACO Section1.3 Ski Course Design 解题报告
skidesign解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- USACO Section 1.3 Prime Cryptarithm 解题报告
题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...
- 【LeetCode】544. Output Contest Matches 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
随机推荐
- windows下利用批处理脚本监控程序
1.要监控的程序为使用cygwin环境编译的exe可执行文件hello.exe,源码如下: #include <stdio.h> #include <unistd.h> voi ...
- 面向对象之php多态
php是面向对象的脚本语言,而我们都知道,面向对象的语言具有三大特性:封装,继承,多态(接口的多种不同的实现方式即为多态). 封装是类的构建过程,php具有.php也具有继承的特性.唯独这个多态,ph ...
- 前端工程化 - Yeoman
什么是Yeoman Yeoman是一个前端构建工具.它整合了yo(yeoman).gulp/grunt和npm/bower等工具,组成了一个完整的工具集合,为前端开发提供了一套完整的解决方案. Yeo ...
- XML_CPP_ZC_libXml2
1.错误信息: /* * Use the following function to reset the two global variables * xmlGenericError and xmlG ...
- Spring中<bean>标签之使用p标签配置bean的属性
在spring的bean配置文件中我们常可以见到下面的例子: <bean id="user" class="com.sys.User" p:name-re ...
- YAML(摘录)
YAML:维基百科 一个用来表达数据序列的格式.强调以数据为中心的标记语言. 使用空白符缩进和大量依赖外观的特殊,适合编辑数据结构,配置文件. 基本格式: 缩进/区块 和内置两者格式,来表示array ...
- C++常考面试题
1 new/delete 与 malloc/free的区别 运算符是语言自身的特性,有固定的语义,编译器知道意味着什么,由编译器解释语义,生成相应的代码. 库函数是依赖于库的,一定程度上独立于语言的. ...
- 先对结果集排序然后做update、delete操作
--先排序然后删除第n条数据delete from scott.emp where empno in (select empno from (select * ...
- 动态创建OATipBean
动态创建OATipBean. 动态创建的OATipBean无法直接设置提示内容,需要添加一个静态文本. 参考User Guide示例如下. If you need to create a tip pr ...
- 多线程pre
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...