پاسخ سوال جنایت کوئرا
در این نوشته تمرین “دایره عجیب” که در وبسایت کوئرا موجود است را برای شما کاربران عزیز حل کردهایم.
پاسخ سوال جنایت کوئرا
رتبهی 161 سال بعد: دوره چهار حلی سه کنکور دارند!
رتبهی یک پارسال: اه!اه! پس 160 تا بذار رو رتبت!
مدتی پیش تصمیم گرفته بودم وارد بازار عرضهی کتاب کنکور شوم! و این دقیقاً پس از آن بود که قیمتهای سرسام آورش کمرم را شکسته بود! درحال حاضرa_1 شیمیِ خیلی قهوهای و دیفرانسیلِ باج و a_3 هندسهیِ خوشخوار داریم. هر بار میتوانیم یکی از دو کار را انجام دهیم:
- دو تا از یک نوع را بفروشیم.
- دو تا از انواع مختلف بدهیم و یکی از نوع دیگر پس بگیریم.
اگر در آخر دقیقاً یکی از یک نوع بماند آن از کدام نوعها میتواند شود؟
ورودی سوال جنایت
در تنها خط ورودی سه عدد , , میآید که هرکدام تعداد یک نوع کتاب را معلوم میکند.
خروجی سوال جنایت
در تنها خط خروجی سه کلمه بنویسید و در امین کلمه معلوم کنید که آیا میتوان طوری کارها را انجام داد که در آخر تنها یکی از نوع بماند(و از انواع دیگر چیزی نماند). اگر ممکن بود YES، و در غیر این صورت NO را چاپ کنید.
حل سوال جنایت
#include <iostream>
#include <math.h>
#include <algorithm>
#include <numeric>
#include <vector>
#include <map>
#include <iomanip>
#include <string.h>
#include <string>
#include <queue>
#include <deque>
#include <bitset>
#include <iterator>
#include <list>
#include <stack>
#include <set>
using namespace std;
const char nl = '\n';
#define IN(A, B, C) assert( B <= A && A <= C)
#define PI 3.1415926535897932384626433832795
#define tr(c,i) for(__typeof__((c)).begin() i = (c).begin(); i != (c).end(); i++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define sz(a) int((a).size())
#define acc ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define ld long double
#define inf 2147483647
#define infll 9223372036854775807
#define pr(i) cout << setprecision(i);
#define prc(i) cout << fixed << setprecision(i);
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin, (x).rend()
#define rep(i , j , n) for(ll i = j ; i <= n ; i++)
#define per(i , j , n) for(ll i = j ; i >= n ; i--)
#define debug(n1) cout << #n1 << ": " << (n1) << endl
#define adebug(n1) cout << #n1 << ": "; rep(i, 0, (sizeof(n1)/sizeof(*n1))-1) cout << n1[i] << " "; cout << endl;
#define vdebug(n1) cout << #n1 << ": "; rep(i, 0, n1.size()-1) cout << n1[i] << " "; cout << endl;
#define bdebug(n1) cout << #n1 << ": "; for(const auto&value : n1) cout << value << " "; cout << endl;
#define ndebug(n1, n) cout << #n1 << ": "; rep(i, 0, n-1) cout << n1[i] << " "; cout << endl;
#define ell endl << endl;
//#define max(a, b) ((a > b) ? a : b)
//#define min(a, b) ((a < b) ? a : b)
ll max(int a,ll b){ return max((ll)a,b);}
ll min(int a,ll b){ return min((ll)a,b);}
ll min(ll a,int b){ return min(a,(ll)b);}
ll max(ll a,int b){ return max(a,(ll)b);}
#define mp make_pair
#define pb push_back
#define fi first
#define se second
ll dx[]={0,0,1,-1};
ll dy[]={1,-1,0,0};
ll dxk[]={0,0,1,-1,1,1,-1,-1};
ll dyk[]={1,-1,0,0,1,-1,1,-1};
bool isint(double d) { return (d == floor(d));}
bool isint(float d) { return (d == floor(d));}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }
ll lcm(ll a, ll b) { return a * b / gcd(a, b); }
ll ipow(ll a, ll b)
{
ll r = 1;
rep(i, 1, b) r *= a;
return r;
}
#define mod 1000000007//1000000007, 998244353
ll power(ll a,ll b){
if(a==1 || b==0)
return 1;
ll c = power(a,b/2);
ll res = (c*c) % mod;;
if(b%2)
res = (res*(a % mod))%mod;
return res;
}
bool isPrime(int n)
{
if(n == 1)
return false;
for(int i=2; i<=sqrt(n); i++)
{
if(n % i == 0)
return false;
}
return true;
}
string toBase(int n, int b)
{
string oval = "";
while(n >= 1)
{
if(n%b < 10)
oval += to_string(n%b);
else
oval += 'A' + (n%b - 10);
n /= b;
}
reverse(oval.begin(), oval.end());
return oval;
}
void solve()
{
}
int main()
{
#ifndef Test
acc;
#endif
int sl, sr;
cin >> sl >> sr;
int n;
cin >> n;
vector<pair<int, int>> m(n);
for(int i=0; i<n; i++)
cin >> m[i].first >> m[i].second;
map<int, pair<int, int>> z;
rep(i, 0, n-1)
{
if(z.find(m[i].first) == z.end())
z.insert(mp(m[i].first, mp(0, 0)));
if(z.find(m[i].second) == z.end())
z.insert(mp(m[i].second, mp(0, 0)));
}
rep(i, 0, n-1)
{
auto it = z.find(m[i].first);
while(it->first < m[i].second)
{
it->second.first ++;
it->second.second ++;
it ++;
}
if(it->first == m[i].second)
it->second.first ++;
}
int maxi = 0;
int mini = inf;
for(auto it=z.begin(); it!=z.end(); ++it)
{
auto p = (*it);
if((p.first >= sl || (next(it) != z.end() && next(it)->first > sl)) && (p.first < sr))
{
if(p.second.second < mini)
mini = p.second.second;
}
if(p.first >= sl && p.first <= sr)
{
if(p.second.first > maxi)
maxi = p.second.first;
}
}
cout << mini << " " << maxi;
#ifdef Test
cout << endl; system("pause");
#endif
return 0;
}
منبع سوال: وبسایت کوئرا
اگر روش حل بهتری برای “تمرین جنایت” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم. اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.



















من اگه جای نویسنده بودم داستانو کوتاهتر میکردم، ولی باحال بود
موفق باشین
نکته مهم اینه که فقط parity مهمه، نه عدد دقیق کتابها
این نکته کاملاً درست است. در بسیاری از مسائل محاسباتی، تمرکز بر “زوجیت یا فردیت” (Parity) اعداد و متغیرها میتواند کلید حل مسئله باشد.
من اینو توی مسابقه حل کردم
موفق باشین
فکر میکنم اگه همه a_i ها برابر باشن جواب خیلی ساده میشه
بله، در صورتی که تعداد کتابهای هر سه نوع یکسان باشد، مسئله سادهتر میشود و میتوان از این تقارن برای یافتن راهحل استفاده کرد.
این سوال شبیه یه بازیه
بله، این مسئله شباهت زیادی به یک بازی دارد.