Problem Description:
ইলেকশনে n সংখ্যক দল আছে । কোন দল কত ভোট পেয়েছে, তা দেওয়া আছে । এরপরে দেওয়া আছে কিছু অনুমান(তুলনা) । প্রতিটা তুলনা এভাবে দেওয়া আছে,
p1 + p2 + ....+pn comaprison value
যেখানে, p1, p2, ..... pn হলো পার্টির নাম, comparison হিসেবে থাকতে পারে <, >, =, <= অথবা >=, আর value হিসেবে থাকতে পারে ১ থেকে ১০০ এর মাঝে একটি পুর্ণ সংখ্যা ।
আউটপুটে বলতে হবে, অনুমানটা ঠিক নাকি ভুল ।
সমাধান:
আমরা map<string, float> টাইপের একটি ম্যাপ নিতে পারি ।
যখন কোন দলের ভোটের পরিমাণ ইনপুট দেয়া হবে, তখনই আমরা সেটা ম্যাপে রাখব । এরপরে যখনই কোন অনুমান দেয়া হবে, আমরা string এর ১ম থেকে + চিহ্ন পাবার আগ পর্যন্ত একটি করে string বানাব, আর ম্যাপ থেকে তার vote এর মান কে যোগ করতে থাকব । এরপরে ওই যোগফল কে প্রদত্ত value এর সাথে তুলনা করে আউটপুট দেখাব ।
কোড:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |