HZAU 18——Array C——————【贪心】
18: Array C
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 586 Solved: 104
[Submit][Status][Web Board]
Description
Giving two integers and and two arrays and both with length , you should construct an array also with length which satisfied:
1.0≤Ci≤Ai(1≤i≤n)
2..png)
and make the value S be minimum. The value S is defined as:
.png)
Input
There are multiple test cases. In each test case, the first line contains two integers n(1≤n≤1000) andm(1≤m≤100000). Then two lines followed, each line contains n integers separated by spaces, indicating the array Aand B in order. You can assume that 1≤Ai≤100 and 1≤Bi≤10000 for each i from 1 to n, and there must be at least one solution for array C. The input will end by EOF.
Output
For each test case, output the minimum value S as the answer in one line.
Sample Input
3 4
2 3 4
1 1 1
Sample Output
6
HINT
In the sample, you can construct an array [1,1,2](of course [1,2,1] and [2,1,1] are also correct), and is 6.
题目大意:给你n,m。表示a数组和b数组。然后让你选m个数组成c数组,保证c[i] <= a[i],要求sigma(c[i]*c[i]*b[i])求和最小。可能没描述不太清楚,自己再看看题吧。。。
解题思路:自己想了一个mlogn的做法,但是一直超时到死。。。赛后听大牛的解法,的确很巧妙ORZ。
自己的超时想法:
#include<stdio.h>
#include<algorithm>
//#include<string.h>
//#include<math.h>
//#include<string>
//#include<iostream>
#include<queue>
//#include<stack>
//#include<map>
//#include<vector>
//#include<set>
using namespace std;
typedef long long LL;
#define mid (L+R)/2
#define lson rt*2,L,mid
#define rson rt*2+1,mid+1,R
const int maxn = 1e3 + 30;
const LL INF = 0x3f3f3f3f;
const LL mod = 9973;
typedef long long LL;
typedef unsigned long long ULL;
struct Num{
int b, c, prod, id;
bool operator < (const Num & rhs)const{
return prod > rhs.prod;
}
}nums[maxn];
int A[maxn], B[maxn], ans[maxn];
priority_queue<Num>PQ;
int Scan() { //输入外挂
int res = 0, flag = 0;
char ch;
if((ch = getchar()) == '-') flag = 1;
else if(ch >= '0' && ch <= '9') res = ch - '0';
while((ch = getchar()) >= '0' && ch <= '9')
res = res * 10 + (ch - '0');
return flag ? -res : res;
}
void Out(int a) { //输出外挂
if(a < 0) { putchar('-'); a = -a; }
if(a >= 10) Out(a / 10);
putchar(a % 10 + '0');
}
int main(){
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
while(!PQ.empty()) PQ.pop();
for(int i = 1; i <= n; ++i){
scanf("%d",&A[i]);
// A[i] = Scan();
nums[i].c = 1;
}
for(int i = 1; i <= n; i++){
scanf("%d",&nums[i].b);
// nums[i].b = Scan();
nums[i].id = i;
nums[i].prod = nums[i].b * (nums[i].c*nums[i].c);
PQ.push(nums[i]);
}
Num nm = PQ.top(); PQ.pop();
ans[nm.id]++;
Num tmp;
for(int i = 1; i < m; ++i){
if(PQ.empty()){
ans[nm.id] += m-i; break;
}
// cout<<PQ.size()<<" ++++"<<endl;
tmp = PQ.top();
// printf("%d %d %d++\n",tmp.id,tmp.c,tmp.prod);
nm.c++;
nm.prod = nm.b*nm.c*nm.c;
if(nm.c > A[nm.id]){
PQ.pop();
nm = tmp;
ans[nm.id] = nm.c; continue;
}
if(tmp.prod < nm.prod){
PQ.pop();
PQ.push(nm);
nm = tmp;
ans[nm.id] = nm.c;
}else{
ans[nm.id] = nm.c;
}
}
int res = 0;
for(int i = 1; i <= n; ++i){
// printf("%d\n",ans[i]);
res += nums[i].b * ans[i] * ans[i];
ans[i] = 0;
}
//printf("%d\n",res);
Out(res);
puts("");
}
return 0;
}
大牛的解法:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<string>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
using namespace std;
typedef long long LL;
#define mid (L+R)/2
#define lson rt*2,L,mid
#define rson rt*2+1,mid+1,R
const int maxn = 1e6 + 30;
const LL INF = 0x3f3f3f3f;
const LL mod = 9973;
typedef long long LL;
typedef unsigned long long ULL;
int a[maxn],b[maxn] ,cost[maxn];
int main(){
int n, m;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i = 1; i <= n; ++i){
scanf("%d",&a[i]);
}
for(int i = 1; i <= n; ++i){
scanf("%d",&b[i]);
}
int cnt = 0;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= a[i]; ++j){
cost[cnt] = (2*j-1)*b[i];
cnt++;
}
}
sort(cost,cost+cnt);
LL res = 0;
for(int i = 0; i < m; ++i){
res += cost[i];
}
printf("%lld\n",res);
}
return 0;
}
HZAU 18——Array C——————【贪心】的更多相关文章
- CodeForces-721D-Maxim and Array(优先队列,贪心,分类讨论)
链接: https://vjudge.net/problem/CodeForces-721D 题意: Recently Maxim has found an array of n integers, ...
- CF1479B Painting the Array(贪心+DP)
题目大意:给你一个序列,让你提取出一个子序列A,剩余的部分组成子序列B,现定义seg(x)表示把序列x中相邻的相同数合并成一个数后,序列x的长度,分别求seg(A)+seg(B)的最大值和最小值,n= ...
- hzau 1209 Deadline(贪心)
K.Deadline There are N bugs to be repaired and some engineers whose abilities are roughly equal. And ...
- Codeforces 402D Upgrading Array:贪心 + 数学
题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...
- Codeforces G. Nick and Array(贪心)
题目描述: Nick had received an awesome array of integers a=[a1,a2,…,an] as a gift for his 5 birthday fro ...
- Codeforces Round #581 (Div. 2) B. Mislove Has Lost an Array (贪心)
B. Mislove Has Lost an Array time limit per test1 second memory limit per test256 megabytes inputsta ...
- upc 组队赛18 STRENGTH【贪心模拟】
STRENGTH 题目链接 题目描述 Strength gives you the confidence within yourself to overcome any fears, challeng ...
- Codeforces Round #696 (Div. 2) C. Array Destruction (贪心,multiset)
题意:有\(n\)个数,首先任选一个正整数\(x\),然后在数组中找到两个和为\(x\)的数,然后去掉这两个数,\(x\)更新为两个数中较大的那个.问你最后时候能把所有数都去掉,如果能,输出最初的\( ...
- js对象 数组Array详解 (参照MDN官网:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
一:数组的创建方式: 1.采用直接量创建 var arr = [];//创建一个空数组 var arr2 = [1,2,3];//创建一个有三个元素的数组 2.采用构造函数创建 a.var arr1 ...
随机推荐
- VSCode提示pylint isnot installed
1.下载所需扩展 在https://www.lfd.uci.edu/~gohlke/pythonlibs/中下载所需扩展,我下载的是:pylint-2.1.1-py2.py3-none-any.whl ...
- kali linux之拒绝服务
Dos不是DOS(利用程序漏洞或一对一资源耗尽的denial of service拒绝服务) DDoS分布式拒绝服务(多对一的攻击汇聚资源能力,重点在于量大,属于资源耗尽型) 历史 以前:欠缺技术能力 ...
- Django 使用第三方服务发送电子邮件
在 Django 网站中使用 mailgun 的邮件收发服务. 1.在 mailgun 官网上注册个账号(免费,免费账号每个月有10000条收发邮件的服务,对我来说已经完全够用了),注册完成后界面如图 ...
- python操作RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- jq学习笔记(一)
1 .attr() 与 .removeAttr()方法 - atr()方法用来获取和设置元素属性 attr()有4个表达式: attr(传入属性名):获取属性的值 attr(属性名, 属性值):设置属 ...
- P3480 [POI2009]KAM-Pebbles 阶梯NIM
$ \color{#0066ff}{ 题目描述 }$ 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时 ...
- SDUT OJ 数据结构实验之串三:KMP应用
数据结构实验之串三:KMP应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- 50个php程序性能优化的方法,赶紧收藏吧!
1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译 ...
- XMLHttpRequest 与 Ajax 概要
关于XMLHttpRequest 开发者使用XMLHttpRequest对象与服务端进行交互(发送http请求.接受返回数据等),可以在不打断用户下一步操作的情况下刷新局部页面.XMLHttpRequ ...
- (Keil) Debug & Simulation 操作
0x00 printf在MCU環境下print debug error message,利用Logic Analyzer模擬MCU register or GPIO狀態. 若是要要使用printf函數 ...