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

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

1001: 好像很簡單的

2019-11-11 04:06:19
字體:
來源:轉載
供稿:網友

1001: 好像很簡單的

Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 101  Solved: 17[Submit][Status][Web Board][Edit] [TestData]

Description

給出一個整數S,另外給出n個數,判斷是否可以從中取出2個數,使得這兩個數的和是S。

 

Input

第一行有個整數T(1 <= T <= 30),代表數據組數。

對于每組數據,第一行包含兩個整數S(1 <= S <= 1000000),n(1 <= n <= 100000)。第二行包含n個整數,整數的范圍為[1,1000000]。

#include "stdio.h"#include "stdlib.h"#include "math.h"/*  思路:本題其實就是使用暴力破解的方式,但是我們會發現超時 因此要進行更快速的方法,將暴力的算法復雜度從n的平方降低到nlgn 因此使用了歸并排序和二分查找   */void merge1(int num[],int p,int t,int q){    int temp[1000000];    int temp_index=0;    int i=t,j=q;    while(i>=p&&j>=t+1){        if(num[i]>=num[j]){            temp[temp_index++]=num[i--];        }else{            temp[temp_index++]=num[j--];        }    }//進行局部排序        //對剩下的元素進行處理    while(i>=p){        temp[temp_index++]=num[i--];    }    while(j>=t+1){        temp[temp_index++]=num[j--];    }    temp_index--;        //將結果賦給num數組    for(int i=p;i<=q;i++){        num[i]=temp[temp_index--];    }        }//歸并排序void merge_sort(int num[],int p,int q){    int t=0;    if(p<q){        t=(p+q)/2;//中間元素        merge_sort(num,p,t);        merge_sort(num,t+1,q);        merge1(num,p,t,q);//將拆分排序好的子序列進行歸并    }}int main(){   // freopen("/Users/qigelaodadehongxiaodi/Desktop/data1.txt", "r", stdin);    //這個不理,是用來方便輸入輸出的東西,利用文本輸入流來讀取數據    //提交代碼的時候記得注銷這條語句        int t;    int s,n;    int num[1000008];    int flag;    scanf("%d",&t);    while(t>0){      //  PRintf("////zheli////n");        flag=0;        scanf("%d %d",&s,&n);        for(int i=0;i<n;i++){            scanf("%d",&num[i]);        }               merge_sort(num,0,n-1);//排序需要使用歸并排序或者堆排序,以達到nlgn的時間復雜度        //歸并排序+二分搜索                                  int i=0,j=n-1;        while(i<j){            if((num[i]+num[j])<s){                i++;            }else                if((num[i]+num[j])>s){                    j--;                }else{                    printf("Yes/n");                    flag=1;                    break;                }        }                if(flag==0){            printf("No/n");        }        flag=0;                t--;    }    return 0;}

Output

對于每組數據,如果存在滿足條件的2個數,則輸出Yes,否則輸出No。

 

Sample Input

26 51 2 3 4 510 51 2 3 4 5

Sample Output

YesNo
上一篇:平面分割空間HDU1290

下一篇:1004: 產生數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陇川县| 定日县| 唐河县| 汶上县| 兴国县| 遵义市| 浙江省| 白山市| 镇雄县| 大名县| 海淀区| 禄丰县| 得荣县| 高淳县| 辰溪县| 和林格尔县| 三门峡市| 长乐市| 比如县| 安远县| 开江县| 丰顺县| 尖扎县| 玛曲县| 花莲县| 日喀则市| 邻水| 黄梅县| 杭州市| 喜德县| 兴和县| 札达县| 博客| 苏尼特左旗| 高阳县| 交城县| 屯留县| 武强县| 于田县| 合肥市| 竹北市|