CDQZ Day3
模拟题 day3
出题人: liu_runda
题目名称 摆渡 摆车 背包
源程序文件名 boat.cpp ju.cpp pack.cpp
输入文件名 boat.in ju.in pack.in
输出文件名 boat.out ju.out pack.out
每个测试点时限 1s 1s 1s
内存限制 512MB 512MB 512MB
测试点数目 10 10 10
每个测试点分值 10 10 10
是否打开O2 优化 是 是 是
在windows 下用lemon 进行测试.
摆渡(boat)
【题目描述】
民国时期,在湘西有一位老人摆渡为生.
水道不复杂,也不简单,有n 个渡口,m 条河流连接不同的渡口.每条河流都可以双向通
行,用时也相同.
摆渡的收费是很特别的.
基本费用是按照路程来算.如果总路程为L,就会收取基本费用L.
附加费用是按照经过的渡口的凶险程度来计算,而且只考虑经过的渡口(包括出发的
渡口和终点的渡口)中凶险程度最大的渡口.如果经过的渡口中凶险程度最大为M,就会
收取附加费用M
收取的总费用为L+M.
现在有q 次摆渡,给出每次的起点和终点,问每次摆渡的最少收费是多少.
【输入格式】
第一行三个整数n,m,q
接下来一行n 个数字,依次表示n 个渡口的凶险程度v
接下来m 行,每行三个数字a,b,w 表示渡口a,b 之间有一条长度为w 的河道.
接下来q 行,每行两个数字u,v 表示一次摆渡的起点和终点
【输出格式】
q 行,每行一个整数表示最少的收费.
【样例输入】
5 5 2
1 2 3 4 5
1 2 1
2 3 2
3 4 3
4 5 4
5 1 5
4 1
2 5
【样例输出】
10
11
【数据范围】
第1,2,3 个测试点,所有渡口的凶险程度相同
第4,5,6 个测试点,所有渡口的凶险程度从1 到n 单调不下降
所有数据,n<=300,m<=40000,1<=a,b,u,v<=n,u!=v,a!=b,1<=w<=109.同一对渡口之间可
能连有多条河道.
摆车(ju)
【题目描述】
liu_runda 从前很喜欢下象棋.象棋中的车是很厉害的棋子,如果一个车和另外一个棋
子位于同一行或者同一列,而两个棋子之间又没有其他棋子,车就可以攻击到那个棋子.
现在liu_runda 有一个n 行m 列的棋盘,上面有一些地方摆上了不是车的棋子.他想
知道,怎样才能在棋盘上尽量多地放置车,并使得它们互相之间不攻击?也就是说,怎样才
能选择若干个格子放置车,使得同一行/同一列放置车的位置之间都隔有其他棋子?
【输入格式】
第一行,三个数字n,m,q,分别表示行数,列数和已经摆放的不是车的棋子数目
接下来q 行,每行两个数字a,b,表示a 行b 列放置了一个不是车的棋子.保证这q 个
位置各不相同.
【输出格式】
一行一个整数,表示棋盘上最多能放车的个数.
【样例输入】
3 3 1
2 2
【样例输出】
4
【数据范围】
第1 个测试点,n=1
第2 个测试点,q=0
第3,4,5 个测试点,n*m<=16
对所有的测试点,n<=50,m<=50,q<=1000
背包(pack)
【题目描述】
给出n 个物品,每个物品有重量w[i]和价值v[i]两种属性.
现在要求选出重量不超过m 的物品,使得物品的价值之和最大.
【输入格式】
第一行两个整数n,m 表示物品个数和重量的限制
接下来n 行第i 行两个整数w[i]和v[i],表示第i 种物品的重量和价值
【输出格式】
一行一个整数表示能够获得的最大价值
【样例输入】
3 5
4 5
2 4
3 4
【样例输出】
8
【数据范围】
第1,2,3 个测试点,n<=20,m<=109,w[i]<=109,v[i]<=109
第4,5,6,7 个测试点,n<=500,m<=500,w[i]<=109,v[i]<=109
第8,9,10 个测试点,n<=500,m<=109,w[i]<=109,v[i]<=10
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
//#include<queue>
//#include<set>
#include<bitset>
#include<cassert>
#include<vector>
#define INF (1LL<<60)
#define re register
#define Ii inline int
#define Il inline long long
#define Iv inline void
#define Ib inline bool
#define Id inline double
#define ll long long
#define Fill(a,b) memset(a,b,sizeof(a))
#define R(a,b,c) for(register int a=b;a<=c;++a)
#define nR(a,b,c) for(register int a=b;a>=c;--a)
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
#define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
#define D_e(x) printf("&__ %d __&\n",x)
#define D_e_Line printf("-----------------\n")
#define Pause system("pause");
const int N=;
using namespace std;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
Iv print(ll x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
int hurt[N],seq[N];
ll dis[N][N],ans[N][N];
Ib cmp(const int &a,const int &b){
return hurt[a]<hurt[b];
}
int main(){
freopen("boat.in","r",stdin),freopen("boat.out","w",stdout);
int n=read(),m=read(),T=read();
R(i,,n)
hurt[i]=read();
R(i,,n)seq[i]=i;
sort(seq+,seq+n+,cmp);
R(i,,n)
R(j,,n)
if(i!=j)
ans[i][j]=dis[i][j]=INF;
R(i,,m){
int u=read(),v=read(),w=read();
Cmin(dis[u][v],w),
dis[v][u]=dis[u][v];
}
R(p,,n){
int k=seq[p];
R(i,,n)
if(i!=k)
R(j,,n)
if(i!=j&&j!=k)
Cmin(dis[i][j],dis[i][k]+dis[k][j]);
R(i,,n)
R(j,,n)
if(i!=j)
Cmin(ans[i][j],dis[i][j]+Max(Max(hurt[i],hurt[j]),hurt[k]));
}
while(T--)
print(ans[read()][read()]),putchar('\n');
return ;
}
boat.cpp
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
//#include<queue>
//#include<set>
#include<bitset>
#include<cassert>
#include<vector>
#define INF (1ll<<60)
#define re register
#define Ii inline int
#define Il inline long long
#define Iv inline void
#define Ib inline bool
#define Id inline double
#define ll long long
#define Fill(a,b) memset(a,b,sizeof(a))
#define R(a,b,c) for(register int a=b;a<=c;++a)
#define nR(a,b,c) for(register int a=b;a>=c;--a)
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
#define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
#define D_e(x) printf("&__ %d __&\n",x)
#define D_e_Line printf("-----------------\n")
#define Pause system("pause");
const int N=;
using namespace std;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
Iv print(ll x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
int a[N][N],b[N][N],tot,head[N*N<<],tim,vis[N*N<<],match[N*N<<];
vector<int>V[N<<];
Ib Hungary(int u){
for(vector<int>::iterator v=V[u].begin();v!=V[u].end();++v)
if(vis[*v]!=tim){
vis[*v]=tim;
if(!match[*v]||Hungary(match[*v])){
match[*v]=u;return ;
}
}
return ;
}
int mp[N][N];
int main(){
//freopen("ju.in","r",stdin),freopen("ju.out","w",stdout);
int n=read(),m=read(),K=read();
R(i,,K)mp[read()][read()]=;
R(i,,n)mp[i][]=mp[i][m+]=;
R(i,,m)mp[][i]=mp[n+][i]=;
R(i,,n)
R(j,,m)
if(!mp[i][j])
tot+=(mp[i][j-]),
a[i][j]=tot;
int tot2=tot;
R(j,,m)
R(i,,n)
if(!mp[i][j])
tot2+=(mp[i-][j]),
b[i][j]=tot2;
R(i,,n)
R(j,,m)
if(!mp[i][j])
V[a[i][j]].push_back(b[i][j]);
//V[b[i][j]].push_back(a[i][j]);
int ans=;
R(i,,tot)
vis[i]=++tim,
ans+=(Hungary(i));//ans+=(!match[i]&&Hungary(i));
print(ans);
return ;
}
ju.cpp
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
//#include<queue>
//#include<set>
#include<bitset>
#include<cassert>
#include<vector>
#define INF (1ll<<60)
#define re register
#define Ii inline int
#define Il inline long long
#define Iv inline void
#define Ib inline bool
#define Id inline double
#define ll long long
#define Fill(a,b) memset(a,b,sizeof(a))
#define R(a,b,c) for(register int a=b;a<=c;++a)
#define nR(a,b,c) for(register int a=b;a>=c;--a)
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
#define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
#define D_e(x) printf("&__ %d __&\n",x)
#define D_e_Line printf("-----------------\n")
#define Pause system("pause");
const int N=;
using namespace std;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
Iv print(ll x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
int n,m,c[],w[];
ll sumc[<<],sumw[<<];
Iv work1(){
R(i,,n-)
sumc[<<i]=c[i+],
sumw[<<i]=w[i+];
ll ans=;
R(i,,(<<)-){
int lowbit=i&(-i);
sumc[i]=sumc[lowbit]+sumc[i^lowbit],
sumw[i]=sumw[lowbit]+sumw[i^lowbit];
if(sumc[i]<=m&&sumw[i]>ans)ans=sumw[i];
}
print(ans),
exit();
}
ll f[];
Iv work2(){
R(i,,m)
f[i]=;
R(i,,n)
nR(j,m,c[i])
if(f[j-c[i]]+w[i]>f[j])
f[j]=f[j-c[i]]+w[i];
print(f[m]),
exit();
}
Iv work3(){
int sum=;
R(i,,n)sum+=w[i];
R(i,,sum)f[i]=INF;
R(i,,n)
nR(j,sum,w[i])
if(f[j-w[i]]+c[i]<f[j])
f[j]=f[j-w[i]]+c[i];
int ans=;
while(f[ans+]<=m)++ans;
print(ans),
exit();
}
int main(){
//R(i,0,100)
// printf("%d-> %d, %d\n",i,i&-i,i^(i&-i));
freopen("pack.in","r",stdin),freopen("pack.out","w",stdout);
n=read(),m=read();
R(i,,n)
c[i]=read(),w[i]=read();
if(n<=)work1();
if(m<=)work2();
work3();
return ;
}
pack.cpp
CDQZ Day3的更多相关文章
- CDQZ集训DAY3 日记
早上起来之后依然开始考试.然而由于校方觉得都挨在一起没有考试氛围,分了两个机房,一开始还没人去,听说另一个机房配置好了之后一堆人开始往外冲,由于我天真的数了一下我是不是要走的,晚了一步,于是乎被教练员 ...
- CDQZ多校集训记
20171218 DAY0 初相逢 今天的阳光很好,确实好极了.下午开始时,mercer说门外站了一堆人,我看都不用看就知道是衡水的.衡水人,怎么说呢,觉得还是挺不一样的.不知道像凡哥和超哥这种奇异的 ...
- 记一周cdqz训练
#include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...
- 冲刺阶段day3
day3 项目进展 今天周三,我们五个人难得的一整个下午都能聚在一起.首先我们对昨天的成果一一地查看了一遍,并且坐出了修改.后面的时间则是做出 登录界面的窗体,完善了登录界面的代码,并且实现了其与数据 ...
- python笔记 - day3
python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...
- python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理
python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...
- Spark菜鸟学习营Day3 RDD编程进阶
Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...
- Spark Tungsten揭秘 Day3 内存分配和管理内幕
Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...
- Catalyst揭秘 Day3 sqlParser解析
Catalyst揭秘 Day3 sqlParser解析 今天我们会进入catalyst引擎的第一个模块sqlparser,它是catalyst的前置模块. 树形结构 从昨天的介绍我们可以看到sqlPa ...
随机推荐
- poj 2007 Scrambled Polygon
#include<stdio.h> #include<algorithm> using namespace std; #define Max 60 struct Point { ...
- 单一入口及MVC目录规范
单一入口指在一个web应用程序中,所有的请求都是指向一个脚本文件,例如我们经常看到某一个网站所有的页面都是index.php?xxxx这样的形式.所有对使用程序的访问都是必须通过这个入口. 目录规范:
- python 数据合并
1. 数据合并 前言 一.横向合并 1. 基本合并语句 2. 键值名不一样的合并 3. “两个数据列名字重复了”的合并 二.纵向堆叠 统计师的Python日记[第6天:数据合并] 前言 根据我的Pyt ...
- idea 删除代码的注释
搜索栏使用 正则表达式搜索 (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|[ \t]*//.*) 会搜索出来所有注释的代码 用空格replace替换掉就 ...
- win7下cygwin命令行颜色和中文乱码解决
在cygwin虚拟机中可以使用ls命令等Linux下的一些命令,如果在win下将环境变量path中添加x:\cygwin\bin(x:指的是cygwin所在的盘符),可以在cmd环境中使用这些命令,而 ...
- WireShark抓包的pcap文件格式分析
http://www.360doc.com/content/14/0220/11/15257968_354157537.shtml http://www.360doc.com/content/14/0 ...
- LinqPad介绍,下载,用法说明
介绍一款用于Linq运算和测试的工具,LinqPad.我感觉这个工具非常优秀,不只是功能上优秀,在使用上也非常优秀,让我爱不释手. LinqPad官方地址:http://www.linqpad.net ...
- 在APP中集成iAd Banner展示广告盈利
如果你已经做了一款超牛X的APP.你也许还有一件是需要操心.APP够好了,怎么盈利呢?你可以对下载你的APP的用户收费.也可以完全的免费,然后在APP里放广告来实现盈利.现在来说,除非一款APP真的是 ...
- Android 文件存放路径【转】
对于应用携带的静态数据,可以放置在应用的assets目录或者res,raw目录下.对于assets目录下的静态数据,存在当文件最大支持1MB的局限,读取方式如下: 1 InputStream is = ...
- Apache mod_rewrite规则重写的标志说明
1.R[=code](force redirect) 强制外部重定向,强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的 ...