国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HDU-2141

2019-11-10 18:32:13
字體:
來源:轉載
供稿:網友
Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which satisfy the formula Ai+Bj+Ck = X. InputThere are many cases. Every data case is described as followed: In the first line there are three integers L, N, M, in the second line there are L integers rePResent the sequence A, in the third line there are N integers represent the sequences B, in the forth line there are M integers represent the sequence C. In the fifth line there is an integer S represents there are S integers X to be calculated. 1<=L, N, M<=500, 1<=S<=1000. all the integers are 32-integers. OutputFor each case, firstly you have to print the case number as the form "Case d:", then for the S queries, you calculate if the formula can be satisfied or not. If satisfied, you print "YES", otherwise print "NO". Sample Input
3 3 31 2 31 2 31 2 331410Sample Output
Case 1:NOYESNO
這道題就是首先想到會將他們三個數表的所有情況列出來,放進一個數組里,但是這樣去做的時候,就會超
出限制,也就是會出現memory limited exceed,再去看題目的要求,發現這里的每一個數表的大小是500,
三個數表的大小相乘。就會超過10000kb的限制,但是如果是兩個數表的大小乘起來的話,就不會超過限制,
所以可以想到,先將兩個數表的和算出來,然后再根據答案,在剩下的一個數表中用二分法找答案,由于二
分法是需要數表有序的,就可以用頭文件algorithm中的sort,當然這就是具體的解體細節了,然后將思路實
現這樣就可以ac了
#include<iostream>#include<algorithm>using namespace std;int find_need(int a[],int s,int need){    int low = 0;    int high = s-1;    while(low<high)    {        int mid = (low+high)/2;        if(a[low]==need||a[high]==need||a[mid]==need) return true;        else if(a[mid]>need) high = mid-1;        else low = mid+1;    }    return false;}int main(){    int times = 0;    int anum,bnum,cnum;    while(cin>>anum>>bnum>>cnum)    {        times++;        cout<<"Case "<<times<<":"<<endl;        int ava[anum],bva[bnum],cva[cnum];        for(int i = 0;i<anum;i++)            cin>>ava[i];        for(int i = 0;i<bnum;i++)            cin>>bva[i];        for(int i = 0;i<cnum;i++)            cin>>cva[i];        int sum[bnum*cnum];        int help = 0;        for(int i = 0;i<bnum;i++)        {            for(int j = 0;j<cnum;j++)            {                sum[help] = bva[i]+cva[j];                help++;            }        }        sort(sum,sum+bnum*cnum);        int xnum;        cin>>xnum;        int yes[xnum];        int xva[xnum];        for(int i = 0;i<xnum;i++)        {            yes[i] = 0;            cin>>xva[i];            for(int j = 0;j<anum;j++)            {                if(find_need(sum,bnum*cnum,xva[i]-ava[j]))                {                    yes[i] = 1;                    break;                }            }            if(yes[i]==1) cout<<"YES"<<endl;            else cout<<"NO"<<endl;        }    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 花莲市| 加查县| 饶平县| 班戈县| 招远市| 将乐县| 长沙市| 永福县| 新河县| 瑞安市| 共和县| 桐城市| 长子县| 长武县| 德令哈市| 北安市| 大洼县| 昭苏县| 康马县| 十堰市| 广东省| 吉首市| 古蔺县| 芜湖市| 和田市| 丹寨县| 咸阳市| 壶关县| 渝中区| 思茅市| 启东市| 新巴尔虎右旗| 新邵县| 普格县| 彭水| 武山县| 湘乡市| 桂东县| 灵石县| 长丰县| 邯郸县|