10670 Work definition ction (Greedy + pitted by the question--) y

Source: Internet
Author: User
Tags sorted by name

Problem C: Work ction
Paperwork is beginning to pile up on your desk, and tensions at the workplace are starting to mount. your boss has threatened to fire you if you don't make any progress by the end of the day. you currently have N units of paperwork on your desk, and your boss demands that you have exactly M units of paperwork left by the end of the day.

The only hope for you now is to hire help. There are varous agencies which offer paperwork limit ction plans:

For $ A they will reduce your paperwork by one unit.
For $ B they will reduce your entire paperwork by half (rounding down when necessary ).


Note that work can never be forced CED to less than 0.

Your task now is to produce a sorted table of agency names and their respective minimum costs to solve your workload problem.

The first line of input consists of a single positive integer representing the number of cases to follow. each case begins with three positive integers separated by spaces: N-your starting workload, M-your target workload, and L-the number of work functions ction agencies available to you, (1 <= M <= N <= 100000, 1 <= L <= 100 ). the next L lines have the format "[agency name]: A, B", where A and B are the rates as described abve for the given agency. (0 <= A, B <= 10000) The length of the agency name will be between 1 and 16, and will consist only of capital letters. agency names will be unique.

For each test case, print "Case X", with X being the case number, on a single line, followed by the table of agency names and their respective minimum costs, sorted in non-decreasing order of minimum costs. sort job agencies with identical minimum costs in alphabetical order by agency name. for each line of the table, print out the agency name, followed by a space, followed by the minimum required cost for that agency to solve your problem.

Sample Input
2
100 5 3
A: 1, 10
B: 2, 5
C: 3, 1
1123 1122 5
B: 50,300
A: 1,1000
C: 10, 10
D: 1, 50
E: 0, 0
Sample Output
Case 1
C 7
B 22
A 37
Case 2
E 0
A 1
D 1
C 10
B 50
Question: There are n tasks that must be completed to m .. Now there are l companies. Each company has A name named A, which means to complete A job for RMB a, and B means to complete half of the work for RMB B... This is half done. The topic is about rounding down .. I thought it was a round-down. The results are different from the example .. Later I realized that it was actually rounding out... In addition, the company name in the question is a string. I thought it was a character at first. The result is WA several times ..... Ah

Note. The output is sorted by the cost. That is, if the cost is the same, it is sorted by name lexicographically.

Idea: greedy .. It takes less than half of the complete and complete parts each time. Which solution is used. Until n/2> = m .. The rest is incomplete. Only one task can be completed (because the last task must be m )..

 

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int t, n, m, l;struct Work {    char name[20];    int a, b;    int value;} w[105];int cmp(Work aa, Work bb) {    if (aa.value != bb.value)return aa.value < bb.value;    if (strcmp(aa.name, bb.name) < 0)return 1;    elsereturn 0;}void solve(int nn) {    int num = n;    while (num / 2 >= m) {if (w[nn].b < (num -num / 2) * w[nn].a)    w[nn].value += w[nn].b;else    w[nn].value += w[nn].a * (num - num / 2);num /= 2;    }    w[nn].value += (num - m) * w[nn].a;}int main() {    int Case = 1;    scanf("%d", &t);    while (t --) {memset(w, 0, sizeof(w));scanf("%d%d%d%*c", &n, &m, &l);for (int i = 0; i < l; i ++) {    char sb; int j = 0;    while ((sb = getchar()) != EOF && sb != ':') {w[i].name[j ++] = sb;    }    w[i].name[j] = '\0';    scanf("%d%*c%d%*c", &w[i].a, &w[i].b);}for (int i = 0; i < l; i ++) {    solve(i);}sort(w, w + l, cmp);printf("Case %d\n", Case ++);for (int i = 0; i < l; i ++)    printf("%s %d\n", w[i].name, w[i].value);    }    return 0;}

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.