sgu299:Triangle(大水題)

水題就只貼代碼了,QAQ

AC code:

#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define clr(a, b) memset(a, b, sizeof a)
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define per(i, a, b) for(int i = (a); i >= (b); --i)
typedef long long LL;
typedef double DB;
typedef long double LD;
using namespace std;

void open_init()
{
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    ios::sync_with_stdio(0);
}

void close_file()
{
    #ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
    #endif
}

const int MAXN = 1009;
const int MAX = 509;
const int P = 10;

struct Bignum
{
    int a[MAX];
    Bignum() 
    {
        clr(a, 0);
        a[0] = 1;
    }
    Bignum(int k)
    {
        clr(a, 0);
        if(!k) a[0] = 1;
        else
        {
            while(k)
            {
                a[++a[0]] = k%10;
                k /= 10;
            }
        }
    }
    inline void adjust()
    {
        rep(i, 1, a[0])
        {
            while(a[i] < 0) a[i+1]--, a[i] += P;
            while(a[i] >= P) a[i+1]++, a[i] -= P;
        }
        while(a[a[0]+1]) a[0]++;
        while(!a[a[0]] && a[0] > 1) a[0]--;
    }
    inline void read()
    {
        char str[MAX] = "\0";
        scanf("%s", str);
        a[0] = strlen(str);
        rep(i, 1, a[0])
            a[i] = str[a[0]-i]-'0';
    }
    inline void print()
    {
        per(i, a[0], 1)
            putchar('0'+a[i]);
    }
};

inline bool operator < (const Bignum &a, const Bignum &b)
{
    if(a.a[0] != b.a[0]) return a.a[0] < b.a[0];
    per(i, a.a[0], 1)
        if(a.a[i] != b.a[i])
            return a.a[i] < b.a[i];
    return false;
}

inline Bignum operator + (const Bignum &a, const Bignum &b)
{
    Bignum ret;
    ret.a[0] = max(a.a[0], b.a[0]);
    rep(i, 1, ret.a[0])
        ret.a[i] = a.a[i]+b.a[i];
    ret.adjust();
    return ret;
}

int n;
Bignum l[MAXN];

int main()
{
    open_init();

    scanf("%d", &n);
    rep(i, 1, n) l[i].read();
    sort(l+1, l+n+1);
    bool flag = false;
    rep(i, 3, n)
        if(l[i] < l[i-1]+l[i-2])
        {
            l[i-2].print(), putchar(' ');
            l[i-1].print(), putchar(' ');
            l[i].print(), puts("");
            flag = true;break;
        }
    if(!flag) puts("0 0 0");

    close_file();
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章