noip第33课作业
- 1. 排座椅
【问题描述】
上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了 M 行 N 列,坐在第i行第j列的同学的位置是 (i,j) ,为了方便同学们进出,在教室中设置了 K 条横向的通道, L 条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了 2 个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。
输入格式:
第一行,有 5 个用空格隔开的整数,分别是 M,N,K,L,D(2≤N,M≤1000,0≤K<M,0≤L<N,D≤2000)
接下来的 D行,每行有 4个用空格隔开的整数。第 i 行的 4 个整数 Xi,Yi,Pi,Qi,表示坐在位置 (Xi,Yi) 与 (Pi,Qi) 的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
输出格式:
共两行。
第一行包含 K个整数 a1,a2,…,aK,表示第 a1 行和 a1+1 行之间、第 a2 行和 a2+1 行之间、…、第 aK 行和第 aK+1 行之间要开辟通道,其中 ai<ai+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含 L 个整数 b1,b2,…,bL ,表示第 b1 列和 b1+1 列之间、第 b2 列和b2+1 列之间、…、第 bL 列和第 bL+1 列之间要开辟通道,其中 bi<bi+1 ,每两个整数之间用空格隔开(列尾没有空格)。
【输入样例】
4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4
【输出格式】
2
2 4
#include<iostream>
#define N 1010
using namespace std;
int m,n,k,l,d,x,y;
int fx,fy,ansk,ansl,maxk = -,maxl = -;
int vist[N][N],ak[N],al[N];
void findk(){//查找行
while(k--){
for(int i = ; i < m; i++){
if(ak[i] != ){
for(int j = ; j < n; j++){
if(vist[i][j] && vist[i+][j]){
ansk++;
}
}
if(ansk > maxk){
maxk = ansk;
fx = i;
ansk = ;
}
}
}
ak[fx] = ;
}
}
void findl(){
while(l--){ // 查找列
for(int i = ; i < n; i++){
if(al[i] != ){
for(int j = ; j < m; j++){
if(vist[j][i] && vist[j][i+]){
ansl++;
}
}
if(ansl > maxl){
maxl = ansl;
fy = i;
ansl = ;
}
}
}
al[fy] = ;
}
}
void print(){
for(int i = ; i <= m; i++){
if(ak[i]){
cout << i << " ";
}
}
cout << endl;
for(int i = ; i <= n; i++){
if(al[i]){
cout << i << " ";
}
}
}
int main()
{
cin >> m >> n >> k >> l >> d;
for(int i = ; i <= *d; i++){
cin >> x >> y;
vist[x][y] = ;
}
findk();
findl();
print();
return ;
}
/*
4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4 */
- 2. 活动安排问题
【问题描述】
设有n(n<=100000)个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。
输入
每行2个整数(100000以内),用空格间隔。表示每个活动的起始和结束时间。最后一行是2个0,表示所有输入的结束。
输出
一个整数,表示最多能安排几个活动。
【样例输入】
1 2
1 4
1 3
2 3
0 0
【样例输出】
2
#include<iostream>
#include<algorithm>
using namespace std;
struct data{
int b,d;
}a[];
int gz(const data &a,const data &b)
{
if(a.d<b.d)return ;
else return ;
}
int main()
{
int i=;
while(cin>>a[i].b>>a[i].d)
{
if(a[i].b==&&a[i].d==){i--;break;}
i++;
}
sort(a,a+i,gz);
int end=,ans=;
for(int j=;j<=i;j++)
if(a[j].b>=end)
{
end=a[j].d;
ans++;
}
cout<<ans;
return ;
}
/*
1 5
1 3
2 3
3 4
6 7
1 4
8 9
0 0 */
【问题描述】
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。
输入:
输入两行,第一行是一个整数n(1< =n< =10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1< =ai< =20000)是第i种果子的数目。
输出:
输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于2^31。
【输入样例】
3
1 2 9
【输出格式】
15
#include<iostream>
#include<algorithm>
using namespace std;
int a[],n;
void df(int x)
{
int i,t,q;
q=x;
for(i=q+;i<=n;i++)
{
if(a[i]<a[q])
q=i;
}
swap(a[x],a[q]);
}
int main()
{
int i,sum;
while(cin >> n)
{
sum=;
for(i=;i<=n;i++)
cin >> a[i];
df();
df();
for(i=;i<=n;i++)
{
a[i]+=a[i-];
sum+=a[i];
df(i);
df(i+);
}
cout << sum;
}
return ;
}
/*
3
1 3 9
17 4
1 2 3 4
19 5
1 2 8 9 15
69 2
1 9 2
10 2 */
noip第33课作业的更多相关文章
- noip第22课作业
1. 数字分解 [问题描述] 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和,当n等于5时有6种拆分方法: 5=1+1+1+1+1 5=1+1+1+2 5=1+1+3 5=1+2+ ...
- noip第5课作业
1. 计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...
- noip第8课作业
1. 计算书费 [问题描述]下面是一个图书的单价表: 计算概论 28.9 元/本 数据结构与算法 32.7 元/本 数字逻辑 45.6元/本 C++程序设计教程 78 元/本 人工智能 35 ...
- noip第34课作业
1. 信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...
- noip第29课作业
1. 钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...
- noip第28课作业
分段数列 [问题描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入格式: 输入第1行包含两个正整 ...
- noip第27课作业
1. 繁忙的都市 [问题描述] 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个 ...
- noip第26课作业
1. 信使 [问题描述] 战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位).指挥部设在第一个哨所.当指 ...
- noip第25课作业
1. 求一个有向图所有顶点入度的和 输入有向图的顶点个数,边数以及各顶点之间的关联情况,要求求出这个有向图的所有顶点入度的总和. [输入格式] 第1行:2个空格分开的整数n(2<=n< ...
随机推荐
- 10.9h5日记
一.单位 1.px是基本的单位,像素 2.em也是一个单位,使用方式,用元素父级的字体大小乘以em前的数字,父级没有就向上一个父级找, 直到body为止,如果body没有,就用默认的字体大小16px ...
- (O)编写可维护的代码示例(原创)
图片轮播: /*广告图片数组*/ var imgs=[ {"i":0,"img":"images/index/banner_01.jpg"} ...
- python提取分析表格数据
#/bin/python3.4# -*- coding: utf-8 -*- import xlrd def open_excel(file="file.xls"): try: d ...
- MySQL学习笔记-锁相关话题
在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因. Mysql常用存储引擎的锁 ...
- jQuery操作(一)
基本语法:$(selector).action() 寻找元素(重要的选择器和筛选器) 一:选择器 1.1 基本选择器: $("*") $("#id") $(&q ...
- wmi uuid
[转]https://www.cnblogs.com/-sylar/p/8376621.html 1. 开始-运行-输入:wbemtest 回车2. 单击"连接", 输入:root ...
- IOS初级:观察者
//为一个编辑框myField添加观察者,观察当编辑框文字改变时通知 //方法textChange是通知发生是要做的事情 [[NSNotificationCenter defaultCenter] a ...
- 2017/2/16:自己ajax+json习惯性写法 代码拼接的写法 +json用post提交乱码的原因
1.先导入jquery的包 2.ajax的写法跟注意点 返回一个list的写法 代码拼接写法: html层: 2.script处 4:在你前面传递参数的时候没有遇到乱码问题的情况下,你使用json并且 ...
- [ASP.NET]使用Layer简介
layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 在与同类组件的比较中,layer总是能轻易获胜.她尽可能 ...
- mac安装oh my zsh
克隆项目到本地 git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh 2.创建配置文件 cp ~/.oh-my-zsh/ ...