51nod 1090 3个数和为0

来源:互联网 发布:sql删除重复字段数据 编辑:程序博客网 时间:2024/05/29 03:36

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090

水题。
枚举前两项 二分第三项。

代码:

#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <math.h>#include <stack>#include <queue>using namespace std;int n;int a[10010];int main(){    while (scanf("%d", &n) != EOF)    {        for (int i = 1;i <= n;i++)            scanf("%d", &a[i]);        sort(a + 1, a + 1 + n);        int ok = 0;        for (int i = 1;i <= n;i++)            for (int j = i + 1;j <= n;j++)            {                if (i != j)                {                    int sum = a[i] + a[j];                    int left = 1, right = n;                    int mid;                    int k = 0;                    int pos;                    while (left <= right)                    {                        mid = (left + right) / 2;                        if (a[mid] == -sum && mid != i && mid != j)                        {                            k = 1;                            pos = mid;                        }                        if (a[mid] + sum > 0) right = mid - 1;                        else left = mid + 1;                    }                    if (k && pos > j)                    {                        printf("%d %d %d\n", a[i], a[j], a[pos]);                        ok = 1;                    }                }            }        if (!ok) puts("No Solution");    }    return 0;}
0 0
原创粉丝点击