پاسخ سوال درِ آزمایشگاه + کوئرا

پاسخ سوال درِ آزمایشگاه + کوئرا
پاسخ سوال درِ آزمایشگاه + کوئرا

پاسخ سوال درِ آزمایشگاه + کوئرا

در این نوشته تمرین “دایره عجیب” که در وبسایت کوئرا موجود می باشد را برای شما کاربران عزیز حل کرده ایم.

 

در مورد سایت کوئرا بیشتر بخوانید…

 

تمرین درِ آزمایشگاه کوئرا + سی پلاس پلاس

فامیل دور که در کار در فعالیت دارد، به تازگی مسئول در آزمایشگاه شده است. او می‌خواهد از کار‌های داخل آزمایشگاه سر در بیاورد. فامیل دور که خیلی به کارش حساس است، هرچیزی که از در رد می‌شود را یادداشت می‌کند. به همین دلیل او یک لیست از تمامی مواد داخل آزمایشگاه دارد. همچنین او با مشاهدات طولانی تمامی واکنش‌ها را هم به خاطر سپرده است. هر واکنش به شکل a_1 + a_2 + a_3 … + a_p  است. یعنی اگر در واکنشی همه‌ی a_1 تا a_p وجود داشته باشد، همه‌ی b_1 تا b_q به وجود می‌آیند. همه‌ی ها متفاوت و همه‌ی bها متفاوت اند ولی ممکن است  و jی وجود داشته باشد که (مانند کاتالیزگرها). حالا فامیل می‌خواهد بداند با این واکنش‌ها چه موادی را می‌تواند داشته باشد. دقت کنید هر ماده‌ای را می‌توان به هر اندازه‌ای رقیق کرد(یعنی اگر از یک نوع ماده در یک زمان داشته باشیم، می‌توانیم برای همیشه از آن استفاده کنیم).

 

ورودی سوال درِ آزمایشگاه

در سطر اول ورودی سه عدد طبیعی  و m و  آمده‌است که به ترتیب نشان‌دهنده‌ی تعداد مواد شناخته شده، تعداد مواد موجود در آزمایشگاه و تعداد واکنش‌ها است.

در سطر بعد  عدد آمده است که نشان‌دهنده‌ی مواد موجود در آزمایشگاه هستند. تضمین میشود این اعداد طبیعی، متفاوت و نابیشتر از n هستند.

سپس  واکنش می‌آید. هر واکنش دارای سه سطر ورودی است. سطر اول حاوی دو عدد طبیعی مانند p و q است.

در سطر دوم  عدد متفاوت آمده‌است که نشان‌دهنده‌ی واکنش‌دهنده‌ها هستند.

و در سطر سوم  عدد متفاوت آمده که نمایان‌گر فراورده‌های واکنش هستند.

مجموع همه‌ی p و ها حداکثر سیصدهزار است.

خروجی سوال درِ آزمایشگاه

در سطر اول خروجی عدد  را چاپ کنید که نمایانگر تعداد موادی است که می‌توان در آزمایشگاه داشت.(مواد اولیه هم باید حساب شوند)

در سطر بعدی  عدد را چاپ کنید که نشان‌دهنده‌ی موادی‌ است که می‌توان آن‌ها را در آزمایشگاه داشت. اعداد باید متفاوت و صعودی باشند.

 

حل سوال درِ آزمایشگاه (به زبان برنامه نویسی سی پلاس پلاس)

#include <iostream>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;
 
int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    bool mojod[n] = {false};
    vector<int> can;
    int temp;
    for(int i=0; i<m; i++)
    {
        cin >> temp;
        mojod[temp-1] = true;
        can.push_back(temp);
    }
    
    vector<int> vakonesh[k][2];
    for(int i=0; i<k; i++)
    {
        int p,q;
        cin >> p >> q;
        
        for(int j=0; j<p; j++)
        {
            cin >> temp;
            vakonesh[i][0].push_back(temp);
        }
        
        for(int j=0; j<q; j++)
        {
            cin >> temp;
            vakonesh[i][1].push_back(temp);
        }
    }
    bool oks[k] = {false};
    int vsize;
    bool changed = false;
    for(int i=0; i<k; i++)
    {
        
        if(oks[i] && i<k-1)
            continue;
        else if(oks[i])
        {
            if(changed)
            {
                i = -1;
                changed = false;
            }
            continue;
        }
        
        vsize = vakonesh[i][0].size();
        bool mishe = true;
        for(int j=0; j<vsize; j++)
        {
            if(mojod[vakonesh[i][0][j]-1] == false)
            {
                mishe = false;
                break;
            }
        }
        
        if(mishe)
        {
            vsize = vakonesh[i][1].size();
            for(int j=0; j<vsize; j++)
            {
                mojod[vakonesh[i][1][j]-1] = true;
            }
            changed = true;
            oks[i] = true;
        }
        
        if(i == k-1)
        {
            if(changed)
            {
                i = -1;
                changed = false;
            }
            continue;
        }
    }
    
    int tedad = 0;
    for(int i=0; i<n; i++)
    {
        if(mojod[i])
        {
            tedad++;
        }
    }
    cout << tedad << endl;
    for(int i=0; i<n; i++)
    {
        if(mojod[i])
        {
            cout << i+1 << " ";
        }
    }
    return 0;
}

 

 

منبع سوال : وبسایت کوئرا

 

اگر روش حل بهتری برای “تمرین درِ آزمایشگاه” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم.

اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.

موفق باشید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]