Moo University - Financial Aid

2024-03-28 06:10
文章标签 university financial moo aid

本文主要是介绍Moo University - Financial Aid,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

poj2010:http://poj.org/problem?id=2010

题意:给你c个点,每个点有两个属性,一个是成为成绩g,一个是资金f,又给你总资金F,然后让你从这c个点中选出n个,这n个点满足两点:1,n个点的资金和不大于总资金F,2:n个点成绩的中位数尽可能的大。
题解:这一题开始自己也没有什么思路,看了别人的思路发现那样的做法好巧妙啊。
思路:首先按照成绩给c个点进行排序,然后对于每个i,计算出在i之前选出n/2个点,然后在i之后选出n/2个点,然后枚举每个i,选出最大的成绩。对于i之前的,只要选出n/2个点且资金之和最小的点即可,如果连最小的资金之和都满足不了资金和不大于F,则其他情况都不会满足。另外:对于选出资金和最小的n/2个。可以用最大堆或者优先队列来实现,每次加入堆中,只保留当前最小的n/2即可!

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 struct Node{
 8    long long g;
 9   long long f;
10 }node[100002];
11 int cmp(Node a,Node b){
12   return a.g<b.g;
13 }
14 long long n,c;
15 long long aa[100002],bb[100002];//分别记录在i之前选出n/2个点最小的资金和和之后的。
16 long long f;
17 int main(){
18   while(~scanf("%I64d%I64d%I64d",&n,&c,&f)){
19      long long sum=0;
20   for(int i=1;i<=c;i++)
21   scanf("%I64d%I64d",&node[i].g,&node[i].f);
22     sort(node+1,node+c+1,cmp);
23       priority_queue<long long>Q;int counts=0;
24         for(int i=1;i<c-n/2;i++){
25          sum+=node[i].f;
26          Q.push(node[i].f);
27          counts++;
28          if(i>=n/2){
29               if(counts>n/2){
30                long long tmp=Q.top();
31                 Q.pop();
32                 sum-=tmp;
33               }
34                aa[i+1]=sum;
35          }
36     }
37       sum=0;counts=0;int counts2=0;
38      priority_queue<long long>Q2;
39       for(int i=c;i>n/2+1;i--){
40          sum+=node[i].f;
41          Q2.push(node[i].f);
42            counts++;
43            counts2++;
44          if(counts>=n/2){
45             if(counts2>n/2){
46           long long tmp=Q2.top();
47              Q2.pop();
48             sum-=tmp;
49             }
50             bb[i-1]=sum;
51          }
52     }
53 long long anss=0;bool flag=false;
54     for(int i=c-n/2;i>n/2;i--){
55         if(bb[i]+aa[i]+node[i].f<=f){
56             flag=true;
57             anss=node[i].g;
58             break;
59         }
60     }
61     if(flag)printf("%I64d\n",anss);
62     else printf("-1\n");
63   }
64 
65 }
View Code

 

转载于:https://www.cnblogs.com/chujian123/p/3536185.html

这篇关于Moo University - Financial Aid的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854685

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

Accept CS Ph.D. Offer from Stony Brook University,去SUNY石溪大学的CS Ph.D.啦

前言:在2017年3月24日,正式决定去纽约州立大学石溪分校(State University of New York, Stony Brook,简称石溪大学),CS Ph.D. 项目。本科直博,DIY申请,全额奖学金,第一年5.1万美元(免学费2.2万,2017 fall, 2018 spring 的TA 1.93万,2018 summer RA 1万,没有 Fellowship) Abs

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算

2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/规律)

解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂,,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 很容易找到循环节为p-1,每一个循环节中有一个非零的球,所以只要判断有多少完整循环节,在判断奇偶,,, #include <iostream>#include <cstdio>#include <cstring>

Local GAP - Financial Statement Version 【海外BS\PL报表】

业务场景: 基于海外IFRS等会计准则为客户定义一套BS\PL报表 BS - 从科目余额抓取 PL - 从利润中心报表抓取 会计报表版本的建立: 路径:IMG>财务会计(新)>总账会计核算(新)主数据>总账科目>定义会计报表版本 事务代码:OB58 Chart of Account : Operation Chart of Account; Build up the

Coursera耶鲁大学金融课程:Financial Markets 笔记Week 02

Financial Markets 本文是学习 https://www.coursera.org/learn/financial-markets-global这门课的学习笔记 这门课的老师是耶鲁大学的Robert Shiller https://en.wikipedia.org/wiki/Robert_J._Shiller Robert James Shiller (born Ma

POJ2010 Moo University - Financial Aid

题意:奶牛学校招生,c头奶牛报名,要选n头(n为奇数),学校是义务制,所以每头奶牛的学费都由学校负责。每头奶牛都由自己的考试分数和它需要花的学费,学校总共有f的资金,问合法招生方案中中间分数(即排名第(n+1)/2)最高的是多少。 题解:先将所有的奶牛按照分数由高到低排序,假设k是招的奶牛中排名中间的那头,按照排序可知,[1,k-1]中的奶牛必定被招了(n-1)/2头,[k+1,c]中也必定被招

2016 Multi-University Training Contest 2-1001---HDU 5734 Acperience

题目链接:HDU 5734题意:有一个向量: W=(w1,w2,...,wn) W=(w_1,w_2,...,w_n),求一个数 α(α≥0) \alpha(\alpha \ge 0)和一个 B=(b1,b2,...,bn) B=(b_1,b_2,...,b_n)向量,使得 ∥W−αB∥2 \left\| W - \alpha B \right\|^2的值最小。 注: ∥X∥=x21+⋯+x2n