Friday, April 21, 2017

[tutorial] UVa 11629 - Ballot Evaluation

Problem Description:


ইলেকশনে n সংখ্যক দল আছে । কোন দল কত ভোট পেয়েছে, তা দেওয়া আছে । এরপরে দেওয়া আছে কিছু অনুমান(তুলনা) । প্রতিটা তুলনা এভাবে দেওয়া আছে,
p1 + p2 + ....+pn comaprison value
যেখানে, p1, p2, ..... pn হলো পার্টির নাম, comparison হিসেবে থাকতে পারে <, >, =, <= অথবা >=, আর value হিসেবে থাকতে পারে ১ থেকে ১০০ এর মাঝে একটি পুর্ণ সংখ্যা ।

আউটপুটে বলতে হবে, অনুমানটা ঠিক নাকি ভুল ।

সমাধান:


আমরা map<string, float> টাইপের একটি ম্যাপ নিতে পারি ।
যখন কোন দলের ভোটের পরিমাণ ইনপুট দেয়া হবে, তখনই আমরা সেটা ম্যাপে রাখব । এরপরে যখনই কোন অনুমান দেয়া হবে, আমরা string এর ১ম থেকে + চিহ্ন পাবার আগ পর্যন্ত একটি করে string বানাব, আর ম্যাপ থেকে তার vote এর মান কে যোগ করতে থাকব । এরপরে ওই যোগফল কে প্রদত্ত value এর সাথে তুলনা করে আউটপুট দেখাব ।

কোড:


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsinged long long
#define vi vector<int>
#define vll vector<ll>
#define ii pair<int, int>
#define vii vector<pair<int, int> >
#define vs vector<string>
#define vd vector<double>
#define mii map<int, int>
#define mli map<ll, int>
#define msi map<string, int>
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define sz size()
#define all(a) a.begin(), a.end()
#define rep0(i, k) for(int i=0;i<k;i++)
#define rep1(i, k) for(int i=1;i<=k;i++)
#define repab(i, a, b) for(int i=a;i<=b;i++)
#define repba(i, b, a) for(int i=b;i>=a;i--)
#define pi acos(-1.0)
#define eps 1e-2
#define mem(a, b) memset(a, b, sizeof(a))
#define mod 1000000007
#define inf 1e9
const int MAX = 10005;
map<string, float> vote;
bool compare(float sum, float val, string cmp)
{
if(cmp=="<" && sum+eps<val)
return 1;
if(cmp==">" && sum>eps+val)
return 1;
if(cmp=="<=" && (sum+eps<val || fabs(sum-val)<eps))
return 1;
if(cmp==">=" && (sum>val+eps || fabs(sum-val)<eps))
return 1;
if(cmp=="=" && fabs(sum-val)<eps)
return 1;
return 0;
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
//ios_base::sync_with_stdio(false); cin.tie(NULL);
int p, g;
string s, party, cmp;
float v;
cin>>p>>g;
rep0(i, p)
{
cin>>party>>v;
vote[party] = v;
}
getchar();
rep1(cas,g)
{
getline(cin, s);
int n = s.length();
float sum = 0.0;
string p = "";
int i=0;
for(i = 0;i<n;)
{
while(i<n && s[i]==' ') i++;
if(s[i]!='+')
{
p+=s[i];
i++;
while(i<n && s[i]==' ') i++;
}
if(s[i]=='+')
{
sum+=vote[p];
p = "";
i++;
while(i<n && s[i]==' ') i++;
}
if(s[i]=='<' || s[i]=='>' || s[i]=='=')
{
sum+=vote[p];
cmp = "";
cmp+=s[i];
i++;
if(s[i]=='=')
{
cmp+=s[i];
i++;
}
while(i<n && s[i]==' ') i++;
break;
}
}
while(i<n && s[i]==' ') i++;
float val = 0;
//cout << s[i] << "\n";
for(;i<n;i++)
{
if(s[i]==' ')
break;
val= val*10 + (s[i] - '0');
}
cout << "Guess #" << cas << " was ";
if(compare(sum, val, cmp))
cout << "correct.\n";
else cout << "incorrect.\n";
}
return 0;
}
view raw uva 11629.cpp hosted with ❤ by GitHub
Comments via facebook
0 Comments via Google+

0 comments:

Post a Comment