Page 2 of 3

Posted: Sat Oct 07, 2006 12:19 pm
by Tariq Shahriar
Oh ho! what a great mistake.

I forgot to store the highest proposal's price in low_price.

that's the wrong. Sorry.

Now AC (Air Conditioning).

WA(10141)

Posted: Sat Feb 03, 2007 8:38 pm
by zaman
Hi, everyone. I'm getting WA in this easy problem.
Anybody please give some sample input where it fail.Here is my code.

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#define SIZE 500000

char ch[85];
char proposal[SIZE][85];
double cost[SIZE];
int met_req[1050];


void main(){
	int n, p, i, j, max_req, pos, rfp_no = 0;
	long double min_cost;
	char c[85];
	
	//freopen("G:\\input.txt","r",stdin);

	while (2 == scanf("%d%d",&n,&p)){
		
		if (n == 0 && p == 0)
			break;

		else {
			
			if (rfp_no != 0)
				printf("\n");
			
			gets(ch);
			
			for ( i = 1; i <= n; i++)
				gets(ch);
			
			
			for ( i = 1; i <= p; i++){
				scanf("%s%lf%d",&proposal[i],&cost[i],&met_req[i]);

				if (i == 1){
					max_req = met_req[i];
					min_cost = cost[i];
					pos = i;
				}
				else{
					if (max_req < met_req[i]){
						max_req = met_req[i];
						min_cost = cost[i];
						pos = i;
						
					}
					else if (max_req == met_req[i]){
						
						if (min_cost > cost[i]){
							pos = i;
							min_cost = cost[i];
						}
					}


				}
				gets(c);
				for ( j = 1; j <= met_req[i]; j++)
					gets(c);
					
			}
			
			printf("RFP #%d\n",++rfp_no);
			puts(proposal[pos]);
		}
	
	}
}
Any help will be appreciated.Please reply soon.

Posted: Tue Feb 13, 2007 1:08 pm
by Tariq Shahriar
Problem mentioned: a line naming the proposal (up to 80 characters terminated by end of line). so the proposal name may contain white spaces.
But your code is-

Code: Select all

for(i=1;i<=p;i++){
            scanf("%s%lf%d",&proposal[i],&cost[i],&met_req[i]);
so use gets().
You can optimize

Code: Select all

for(i=1;i<=p;i++){
            scanf("%lf%d", cost+i, met_req+i);
but this will not work for string input. For string input, it needs some modification. Rather, &str is better.
Moreover, you have no need to store proposal, cost, met_req in an array; because you are inputing and using these variables immediately, and are not using it later. So just declare as a single variable.

Posted: Tue Feb 13, 2007 1:47 pm
by Tariq Shahriar
However, there has another problem in your code. Initialize max_rep and min_cost by an out-of-range value for every case.

help

Posted: Sat Oct 06, 2007 11:36 pm
by Fuad Hassan EWU
:oops:
WA!!! in this problem!!!!! plz help

Code: Select all

Don't take the easy problem easily and don't do silly mistakes, coz doing silly mistakes are the non silly crime. 

Posted: Tue Oct 09, 2007 12:09 am
by Jan
Try the set.

Input:

Code: Select all

4 4
a
b
c
d
A
20 2
a
b
B
21 1
b
C 
20 2
c 
d
D
20 2
a
d
0 0
Output:

Code: Select all

RFP #1
A
Hope it helps.

..

Posted: Tue Oct 09, 2007 12:02 pm
by Fuad Hassan EWU
hmm jan vai now it is AC. actually i didn't go through the problem attentively. that's why i calculated the result using totally wrong variables.
this is always happens in case of easy problems. thanks.

Re: 10141 - Request for Proposal

Posted: Sat Dec 18, 2010 1:01 am
by ByOnti
Hi everybody,

Can any of you can help me with this problem? I tested with all possible cases, but still having WA from judge.

- I send a blank line only between cases and I got WA.
- I send nothing where there are no winner and I got WA, ( the problem does not specify what to print )
- about this rule : " If several proposals have the same compliance and price you are to select the first one in the input. " I'm saving the original order in the index field, so at the end I'm ordering and print the first supplier in the list. but also I got WA.

So I don't know what more I can do.


this is my code :

Code: Select all

//============================================================================
// Name        : rfp.cpp
// Author      : byOnti 
// Description : UVA#10141 - Request for Proposal
//============================================================================

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
using namespace std;

struct candidate {
	string name;
	double money, compliance;
	int index;
};

bool myCompare (candidate i,candidate j) { 
	if ( i.compliance > j.compliance ) return true;
	if ( i.compliance < j.compliance ) return false;
		
	if ( i.money < j.money ) return true;
	if ( i.money > j.money ) return false;

	if ( i.index < j.index ) return true;
	if ( i.index > j.index ) return false;
		
	return false;
}


  set <string> items;
  set <string>::iterator mi;

  vector<candidate> proposal;
  vector<candidate>::iterator pi;

int main() {
	int n,p,i,j,t;
	string a,b;
 
  cin>>n>>p;
	cin.ignore();//dummy char
	t=0;
  while( !(n==0 && p==0)) {	
    //if (t) cout << endl;
  	items.clear();
  	proposal.clear();
  	cout<<"RFP #"<<++t<<endl;
  	for (i=0; i<n; i++) {
  		getline(cin,a);
  		items.insert(a);
  	}
  	int cant,met;
  	for (i=0; i<p; i++) {
  		candidate c;
  		getline(cin, c.name);
  		cin>>c.money>>cant;
  		cin.ignore();
  		met = 0;
  		for (j=0; j<cant; j++ ) {
    		getline(cin,b);
    		mi = items.find(b);
    		if (mi!= items.end()) met++;
  		}
  		c.index = i;
  		c.compliance = 1.0 * met / items.size();
  		proposal.push_back ( c );
  	}

    sort (proposal.begin(), proposal.end(), myCompare); 
    //cout << "proposal contains: "<<endl;
    //for (pi=proposal.begin(); pi!=proposal.end(); pi++) 
    //cout << pi->compliance<<" " <<pi->money<< "  "<<pi->index<<" "<<pi->name << endl;

		pi=proposal.begin();
		if (pi->compliance > 0) cout<<pi->name<<endl;
    cout<<endl;

    cin>>n>>p;
    cin.ignore();
	}
	return 0;
}

10141

Posted: Fri Aug 12, 2011 4:38 am
by rte
hi everybody...

i was tried to solve the 10141 problem, and firstly i thought that i needed to search if any name of the requirement (from the proposal) was in the main list
i used a set, and my code was:

Code: Select all

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <set>
#include <cstring>

using namespace std;

int main(){
	
	int count = 1,r;
	while(true){
		int n,m;
		set < string > s, s2;
		
		double maxPrize=0, prize;
		int maxMet=0;
		string maxName, name, requeriment, met;
		
		scanf("%d%d\n", &n, &m);
		
		maxMet = -1;
		maxPrize = 0;
				
		if(n==0) break;
		
		for(int i=0; i<n; ++i){
			getline(cin, requeriment, '\n');
			s.insert(requeriment);
		}
		for(int i=0; i<m; ++i){
			getline(cin, name, '\n');
			scanf("%lf%d\n", &prize, &r);
			
			for(int j=0; j<r; ++j){
				getline(cin, met, '\n');
				if(s.find(met) != s.end()) s2.insert(met);				
			}
			if(maxMet < (int)s2.size()) {
				maxName = name;
				maxMet = (int)s2.size();
				maxPrize = prize;
			}else if(maxMet == (int)s2.size() && maxPrize > prize){
				maxName = name;
				maxPrize = prize;
			}
			s2.clear();			
		}
		if(count > 1) printf("\n");
		printf("RFP #%d\n", count);
		cout << maxName << endl;
		count ++;
	}
}
but i got WA, then i tried to solve without searching the requirement, replacing

this segment:

Code: Select all

			for(int j=0; j<r; ++j){
				getline(cin, met, '\n');
				if(s.find(met) != s.end()) s2.insert(met);				
			}
			if(maxMet < (int)s2.size()) {
				maxName = name;
				maxMet = (int)s2.size();
				maxPrize = prize;
			}else if(maxMet == (int)s2.size() && maxPrize > prize){
				maxName = name;
				maxPrize = prize;
			}
			s2.clear();
for this:

Code: Select all

			for(int j=0; j<r; ++j){
				getline(cin, met, '\n');
			}
			if(maxMet < r) {
				maxName = name;
				maxMet = r;
				maxPrize = prize;
			}else if(maxMet == r && maxPrize > prize){
				maxName = name;
				maxPrize = prize;
			}
and i got AC...

i can't understand why my first code was wrong, the only answer that i find is the file.IN (input file) contains some test cases that ignore if a requirement of any proposal is in the list of requirements...

if i'm wrong, please tell me...

Re: 10141 - Request for Proposal

Posted: Mon Dec 31, 2012 12:06 pm
by Mukit Chowdhury
Why WA !!!! Help please.... This problem is very easy .... :(

Code: Select all

Accepted.... :)

Re: 10141 - Request for Proposal

Posted: Fri Aug 09, 2013 7:34 pm
by cosmin79

Code: Select all

#include <cstdio>
#include <cstring>
#include <vector> 
#include <algorithm>
#include <iostream>
#include <map>
#include <string>
#define mp make_pair
#define LMAX 85
#define NMAX 1005
using namespace std;
int n, p, r, no, res_no;
char A[NMAX][LMAX];
char name[LMAX], word[LMAX], res_name[LMAX];
double price, best_price;

int main()
{
    freopen("input", "r", stdin);
    
    int i, j, k, rfp_no = 0;
    while (scanf("%d%d\n", &n, &p) == 2)
    {
        if (!n && !p)
            return 0;
        if (rfp_no)
            printf("\n");
        
        rfp_no++;
        for (i = 1; i <= n; i++)
            gets(A[i]);
        
        for (i = 1; i <= p; i++)
        {
            memset(name, 0, sizeof(name));
            gets(name);
            scanf("%lf%d\n", &price, &r);
            no = 0;
            
            for (j = 1; j <= r; j++)
            {
                memset(word, 0, sizeof(word));
                gets(word);
                for (k = 1; k <= n; k++)
                    if (strcmp(A[k], word) == 0)
                    {
                        no++;
                        break ;
                    }
            }
            
            if (res_no < no || (res_no == no && price < best_price))
            {
                memcpy(res_name, name, sizeof(name));
                best_price = price;
                res_no = no;
            }
        }
        
        printf("RFP #%d\n", rfp_no);
        cout << res_name << "\n";
        best_price = 0; res_no = -1;
        memset(A, 0, sizeof(A));
    }
    return 0;
}

Can anyone please tell me what's wrong in this piece of code? I have made the obvious approach of storing the requirements into a matrix and afterwards, whenever I'm analysing a proposal I'm looking up each requirement against the previous matrix. As for the comparison criteria, the no of met requirements comes first and in case of equality, the price (lower) comes second. I'm making sure I'm leaving a blank line between every 2 tests cases and that I'm not leaving 2 blank lines after the last testcase.
Therefore, I would expect a TLE result in the worst case for the lookup step, but instead I'm getting a WA verdict.
Ideas please? Thank you in advance!

Re: 10141 - Request for Proposal

Posted: Sat Aug 10, 2013 12:05 am
by brianfry713
Don't read from a file.

Re: 10141 - Request for Proposal

Posted: Sat Aug 10, 2013 12:30 am
by cosmin79
Sorry about that. I have left it unintentionally. I usually comment it before submitting ; so this is not the issue

Re: 10141 - Request for Proposal

Posted: Sat Aug 10, 2013 1:33 am
by brianfry713
All requirements are from the RFP requirement list, and no requirements are duplicated.

Instead of matching requirements, just compare the numbers. You can ignore all requirement strings, the only string I keep in my AC code is the name of the best proposal.

Re: 10141 - Request for Proposal

Posted: Sun Nov 03, 2013 3:45 am
by d3nd0h
Hello if been trying for some time, but still isn't getting AC, can anyone give me several test case which I would make the stupid mistake?
If you can please also check my code, Thx :D

Code: Select all

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;

int main(){
	string dum,out;
	double d,num,price ;
	int n,p,r,count=0;
	scanf("%d%d",&n,&p);
	while(n!=0 && p!=0){
		price=99999999999;num=0;out="";
		getline(cin,dum);
		for(int i=0;i<n;i++) getline(cin,dum);
		for(int i=0;i<p;i++){
			getline(cin,dum);
			scanf("%lf %d",&d,&r);
			if(r==0)continue;
			if(num<r){num=r; price=d; out=dum;}
			else if(num==r && price>d){num=r; price=d; out=dum;}
			getline(cin,dum);
			for(int j=0;j<r;j++) getline(cin,dum);
		}
		count++;
		printf("RFP #%d\n",count);
		cout<<out<<'\n'<<'\n';
		scanf("%d%d",&n,&p);
	}
	return 0;
}