洛谷P1392 取数 [堆]
取数
题目描述
在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和。对于给定的数阵,请你输出和前k小的取数方法。
输入输出格式
输入格式:
第一行,三个数n,m,k。
第2~n+1行,每行m个正整数
输出格式:
一行共k个数,代表在每一行取一个数前k小的加和
输入输出样例
说明
对于20%的数据,n≤8
对于100%的数据,n≤800,k≤m≤800
分析:
WA了无数次,最后发现就是一个取址符号没打。。。。。。真煞笔。。。
这个蒟蒻真的懒得写了,如果想看思路就参考一下这里吧,蒟蒻就只上代码了。
Code:
#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[][];
int size,b[],c,cc;
struct Node{
int x,y,num;
}bdg,h[];
inline void Swap(Node &x,Node &y)
{Node temp=x;x=y;y=temp;}
inline void ins(Node x)
{
h[++size]=x;
int ka=size;
while(ka>){
if(h[ka].num<h[ka>>].num){
Swap(h[ka],h[ka>>]);ka>>=;}
else break;}
}
inline void delet()
{
h[]=h[size--];
int ka=,s=ka<<;
while(s<=size){
if(s<size&&h[s+].num<h[s].num)s++;
if(h[s].num<h[ka].num){
Swap(h[s],h[ka]);ka=s;s=ka<<;}
else break;}
}
inline Node get()
{
Node ret=h[];
delet();return ret;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
scanf("%d",&a[c][i]);
sort(a[c]+,a[c]+m+);
for(int j=;j<=n;j++){
cc=-c;size=;
for(int i=;i<=m;i++)
scanf("%d",&b[i]);
sort(b+,b+m+);
bdg.x=;
for(int i=;i<=k;i++){
bdg.y=i;bdg.num=a[c][]+b[i];ins(bdg);}
for(int i=;i<=k;i++){
bdg=get();
a[cc][i]=bdg.num;
bdg.x++;bdg.num=a[c][bdg.x]+b[bdg.y];
ins(bdg);}
c=-c;}
for(int i=;i<=k;i++)
printf("%d ",a[c][i]);
return ;
}
洛谷P1392 取数 [堆]的更多相关文章
- 洛谷 P1392 取数
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...
- [洛谷P1392] 取数
无法用复杂状态进行转移时改变计算方式:巧妙的整体考虑:压缩空间优化时间 传送门:$>here<$ 题意 给出一个n*m矩阵,从每一行选一个数加起来,可以得到一个和.易知总共会有$n^n$个 ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 洛谷P1288 取数游戏II[博弈论]
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...
- 洛谷P1288 取数游戏II
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...
- 洛谷 p1123 取数游戏【dfs】
题目链接:https://www.luogu.org/problemnew/show/P1123 转载于:>>>>>> 题目描述 一个N×M的由非负整数构成的数字矩 ...
- 洛谷 P1123 取数游戏
题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. ...
- 洛谷——P1123 取数游戏
P1123 取数游戏 题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取 ...
- P1392 取数[堆]
题目描述 在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和.对于给定的数阵,请你输出和前k小的取数方法. 解析 写这题完全自闭. 根本没联想起远古时期做的 P1631 ...
随机推荐
- nodejs与mongo
1.连接URL (使用数据用户名与密码连接或不使用连接数据库) npm install mongodb --save var mon = require('mongodb').MongoClient; ...
- uva 1506 Largest Rectangle in a Histogram
Largest Rectangle in a Histogram http://acm.hdu.edu.cn/showproblem.php?pid=1506 Time Limit: 2000/100 ...
- 2015/9/20 Python基础(16):类和实例
面向对象编程编程的发展已经从简单控制流中按步的指令序列进入到更有组织的方式中,依靠代码块可以形成命名子程序和完成既定的功能.结构化的或过程性编程可以让我们把程序组织成逻辑快,以便重复或重用.创造程序的 ...
- 【设计模式】 模式PK:命令模式VS策略模式
1.概述 命令模式和策略模式的类图确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的意图是封装算法,它认为“算法”已经是一个 ...
- [Luogu 2596] ZJOI2006 书架
[Luogu 2596] ZJOI2006 书架 第一次指针写 FHQ_Treap(省选噩梦数据结构)AC 啦! 省选试机写它,紧张过度失败了. 省选 Day 1 考场写它,写挂了. 省选 Day 1 ...
- truncate与delete以及drop
truncate:删除整个表,但不删除定义(删除了整个表的数据,但表结构还在) drop:删除整个表,表数据和表结构都删除了 delete:删除表中数据 比较delete和drop 1.truncat ...
- python学习笔记(九)之字符串
定义字符串 >>> mystring = 'Hello Python' >>> name = str('Mountain') >>> mystri ...
- 用vue快速开发app的脚手架工具
前言 多页面应用于结构较于简单的页面,因为简答的页面使用router又过于麻烦.本脚手架出于这样的场景被开发出来. 使用脚手架搭配Hbuilder也同样可以快速使用vue开发安卓和IOS APP. 本 ...
- js中三种定义变量 const, var, let 的区别
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...
- cookie、session、localstorage
最早的Cookies问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了.优势就是大家都支持,而且支持得还蛮好.cookie的内容主要包括:名字,值,过期时间, ...