uva 11649 - Home! Sweet Home!(贪心+优先队列)

原创 2014年03月28日 22:57:30

D

Home! Sweet Home!

Input: Standard Input

Output: Standard Output

 

 

Own home is the sweetest place if it is really secured. People build wall around home to make their home more secured. Some pillars are required to make more strong wall. There is a shop named “Home! Sweet Home!”, which sells pillar specially made for building walls. This is really a busy shop. Everyday lot of contractors come, who are responsible for building walls, having a list of homes in their hands. Their list usually contains information of homes specially height of the home and number of pillars required to build that home.

They find pillars are arranged in a row in that shop. Every pillars in row are tagged with heights. Every contractors want to buy some pillars such that they can make walls for all those homes in their list. But unfortunately the shop has some limitation of pillars. So the owner of that shop decides to hire you to write a program for them, which can calculate the number of maximum possible home, for which the contractor can build wall using the pillars in that shop.

 

Note that, a pillar having less height than a home cannot be used to build wall in that home for security purpose.

 

Input

First line of input will contain a number T(1<=T<=200), which indicates the number of test cases. Each test case starts with a line having two integers NP and NH(1<=NP<=100000, 1<=NH<=100000), number of pillars in “Home! Sweet Home!” and number of homes in contractor's list. The next line will contain three integers A, B and C (1 <= A, B, C <= 10000). You can calculate height of the pillars of the shop by this way -

 

PH= C % 10000 + 1

PH2 = (A * PH1 + C) % 10000 + 1

PHi = (A * PHi-1 + B * PHi-2 + C) % 10000 + 1, where 3<=i<=NP.

 

Here PHi represents the height of ith pillar in the row of the shop.

 

The next line will contain six integers E, F, G, H, I and J. (1 <= E, F, G, H, I, J <= 10000). You can generate the height of the homes and number of pillars required for corresponding homes in the list by this way –

 

HH1 = G % 10000 + 1

PR1 = J % 100000 + 1

 

HHi = (E * HHi-1 + F * PRi-1 + G) % 10000 + 1, where 2<=i<=NH

PRi = (H * PRi-1 + I * HHi-1 + J) % 100000 + 1, where 2<=i<=NH

 

Here HHi represents height of ith home and PRi represents number of pillars required to build wall for ith home.

 

Output

For each test case, output a single line of the form “Case X: N”, where X denotes the case number and N denotes the maximum number home for which it is possible to make a wall.

                

Sample Input                              Output for Sample Input

1

10 4

2 10 19

1 2 1 1 1 1

Case 1: 2

 

Problem setter: Md. Arifuzzaman Arif , Special Thanks: Jane Alam Jan

 

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;

struct Home{
    int h , r;
    Home(int a = 0 , int b = 0){
        h = a , r = b;
    }
};
vector<Home> home;
vector<int> pillar;
int A , B , C , E , F , G , H , I , J , NP , NH;

bool cmp1(int a , int b){ return a<b;}

bool cmp2(Home h1 , Home h2){
    return h1.h<h2.h;
}

struct cmp{
    bool operator()(Home h1 , Home h2){
        return h1.r>h2.r;
    }
};

void initial(){
    home.clear();
    pillar.clear();
}

void readcase(){
    scanf("%d%d" , &NP , &NH);
    scanf("%d%d%d%d%d%d%d%d%d" , &A , &B , &C , &E , &F , &G , &H , &I , &J);
    pillar.push_back(C % 10000 + 1);
    if(NP >= 2) pillar.push_back((A * pillar[0] + C) % 10000 + 1);
    for(int i = 2; i < NP; i++){
        pillar.push_back((A * pillar[i-1] + B * pillar[i-2] + C) % 10000 + 1);
    }
    home.push_back(Home(G % 10000 + 1 , J % 100000 + 1));
    for(int i = 1; i < NH; i++){
        home.push_back(Home((E * home[i-1].h + F * home[i-1].r + G) % 10000 + 1 , (H * home[i-1].r + I * home[i-1].h + J) % 100000 + 1));
    }
    sort(pillar.begin() , pillar.end() , cmp1);
    sort(home.begin() , home.end() , cmp2);
}

void computing(){
    priority_queue<Home , vector<Home> , cmp> q;
    int h_index = 0 , p_index = 0 , ans = 0;
    while(p_index < NP){
        while(h_index < NH && home[h_index].h <= pillar[p_index]){
        	if(home[h_index].r <= NP-p_index) q.push(home[h_index]);
        	h_index++;
        }
        if(!q.empty()){
            Home thome = q.top();
            q.pop();
            thome.r--;
            if(thome.r <= 0){
            	ans++;
            }
            else q.push(thome);
        }
        p_index++;
    }
    printf("%d\n" , ans);
}

int main(){
    int T;
    scanf("%d" , &T);
    for(int i = 1; i <= T; i++){
        initial();
        readcase();
        printf("Case %d: " , i);
        computing();
    }
    return 0;
}


相关文章推荐

nyoj 1100 WAJUEJI which home strong!( BFS+优先队列)

在一个山沟里,姐弟俩同时考上了大学。但由于家里拮据,所以这并不是什么好消息。父亲对孩子说:我就是砸锅卖铁也要把你们姐俩供出来。 当时的姐姐已经决定放弃上学的机会。 没想到第二天天还没亮,弟弟就偷偷带著...

NYOJ - 1100 - WAJUEJI which home strong!(BFS变形,优先队列)

输入 第一个数T,T组测试数据。 两个数 n, m; ( 0 接下来n行每行m 个字符。 ‘s’ 表示弟弟目前所在位置。 ‘# ’表示此处为一座山。为了节省体力,不从此处通行。 从‘A’-...

NYOJ 1100 WAJUEJI which home strong!(BFS+优先队列)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1100 解题思路:广搜+优先队列 自定义优先级用优先队列存最小花费,更新的时候是加s[...

(advanced) UVA 优先队列+贪心 1316 Supermarket

A supermarket has a set Prod of products on sale. It earns a profit px for each product x in Prod so...

Uva-7423-Assigning Workstations(贪心+优先队列)

链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&pr...

UVa 757 / POJ 1042 / East Central North America 1999 Gone Fishing (枚举&贪心&想法题&优先队列)

757 - Gone Fishing Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinej...

UVa 1422 - Processor(二分 + 贪心 + 优先队列)

题意 有N个任务,每个任务只能在开始时间到结束时间之内完成,有任务量。完成所需时间是w / 处理器速度。 输出处理器速度最大值的最小值。 思路 虽然一看就知道是二分,但...

UVa 1153 - Keep the Customer Satisfied (贪心 + 优先队列)

题意 输出能完成的最大任务数 思路 一开始写了二分 + DFS,果断TLE。 后来想了很久也没想到什么好办法,参考了别人的思路。 这思路也挺神奇的,用优先队列维护...

[贪心&&优先队列]uva10954 Add All

题意:在数组中拿出两个数相加,再把结果放回数组中再如此反复,求最小的结果是多少,典型的哈弗曼编码的题目。 思路:使用贪心策略,每次都在数组中取出最小的两个数相加,由此得到的结果最小。使用优先队列较为简...

(intermediate) UVA 贪心+二分+优先队列 1422 Processor

An ``early adopter" Mr. Kim bought one of the latest notebooks which has a speed-controlled processo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva 11649 - Home! Sweet Home!(贪心+优先队列)
举报原因:
原因补充:

(最多只允许输入30个字)