ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1759. Долгожители

No subject
Послано tt123753 2 окт 2012 18:25
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

struct Date
{
    int day;

    int month;

    int year;
};

struct person
{
    int num;

    int live;

    Date die;
};

bool comp(person a, person b)
{
    if (a.live != b.live) return a.live > b.live;
    if (a.die.year != b.die.year) return a.die.year < b.die.year;
    if (a.die.month != b.die.month) return a.die.month < b.die.month;
    if (a.die.day != b.die.day) return a.die.day < b.die.day;
}

bool leap(int year)
{
    if (year%400==0) return 1;
    if (year%100==0) return 0;
    if (year%4==0) return 1;
    else return 0;
}

int monthDay(int year, int month)
{
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) return 31;

    else if (month == 4 || month == 6|| month == 9 || month == 11) return 30;

    else if (leap(year))return 29;

    else return 28;
}

int Distance(Date a, Date b)//a??¨®¨²b  o??e¨º?¨®????1¨¨??¨²
{
    int dis = 0;

    for (int i = a.year+1; i < b.year; ++i)
    {
        if (leap(i)) dis += 366;

        else dis += 365;
    }

    if (a.year != b.year)
    {
        for (int i = a.month+1; i <= 12; ++i)
        {
            dis += monthDay(a.year, i);
        }

        dis += (monthDay(a.year, a.month) - a.day + 1);

        for (int i = 1; i < b.month; ++i)
        {
            dis += monthDay(b.year, i);
        }

        dis += b.day;
    }
    else
    {
        if (a.month != b.month)
        {
            dis += (monthDay(a.year, a.month) - a.day + 1);cout << monthDay(a.year, a.month) << endl;

            for (int i = a.month+1; i < b.month; ++i)
            {
                dis += monthDay(b.year, i);
            }

            dis += b.day;
        }
        else
        {
            dis += (b.day - a.day + 1);
        }
    }

    return dis;
}

int convert(char a, char b)
{
    return (a - '0')*10 + b - '0';
}

int convert(char a, char b, char c, char d)
{
    return (a - '0')*1000 + (b - '0')*100 + (c - '0')*10 + d - '0';
}

void print(Date a)
{
    cout << a.year << " " << a.month << " " << a.day << endl;
}

int main()
{
    int m;

    cin >> m;

    char useless[11];

    Date a, b;

    person p[101];

    for (int i = 0; i < m; ++i)
    {
        scanf("%d.%d.%d", &a.day, &a.month, &a.year);

        cin >> useless;

        scanf("%d.%d.%d", &b.day, &b.month, &b.year);

        p[i].num = i+1;

        p[i].live = Distance(a, b);

        p[i].die = b;
    }

    sort(p, p+m, comp);

    cout << p[0].num << endl;

    system("pause");
}
Re: No subject
Послано tt123753 2 окт 2012 18:26
I don't know why it always gets wrong answer;
Re: No subject
Послано tt123753 2 окт 2012 18:30
i know………… it's my fault... because i cout more sth.