• 分治&&一本通1244


    分治就是把一组大数据分成小数据管理,如1000可以分成1-500,501-1000分开操作。

    ybt1244:和为给定数

    【题目描述】

    给出若干个整数,询问其中是否有一对数的和等于给定的数。

    【输入】

    第一行是整数n(0 < n ≤ 100,000),表示有n个整数。

    第二行是n个整数。整数的范围是在00到108108之间。

    第三行是一个整数m0m230)m(0≤m≤230),表示需要得到的和。

    【输出】

    若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行No。

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int a[1000000];
    int num;
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	  cin>>a[i];
    	cin>>num;
    	int l=1,r=n;
    	sort(a+1,a+n+1);
    	while(a[l]+a[r]!=num&&l<r)
    	{
    		if(a[l]+a[r]>num)r--;
    		if(a[l]+a[r]<num)l++;
    	}
    	if(l>=r)cout<<"No"<<endl;
    	else cout<<a[l]<<' '<<a[r]<<endl;
    	return 0;
    }
    这道题不是我的思路,这道题是先排序,在首尾相加,大了找小的,小了找大的,很简洁,也很能体现分治的思想,相对较容易理解。
  • 相关阅读:
    [bzoj 2460]线性基+贪心+证明过程
    [Wc2011] Xor
    [BZOJ2844]线性基+xor本质不同第K大
    洛谷3857 [TJOI2008]彩灯
    HDU3949 异或线性基
    hdu3062 party --2-sat
    KM算法详解+模板
    Hopcroft-Karp算法
    bzoj 1135: [POI2009]Lyz
    hall定理的证明
  • 原文地址:https://www.cnblogs.com/lizhengde/p/12377082.html
Copyright © 2020-2023  润新知