| | No subject
 Edited by author 13.12.2017 23:34
help please, send a working code to this task on с++ on mail juliauhova@mail.ru. I will be very grateful.
 
 Edited by author 12.06.2013 01:24
#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");
 }
 I don't know why it always gets wrong answer; i know………… it's my fault... because i cout more sth.try this test2
 11.02.2000 12.02.2000 11.02.2001
 09.02.2001 11.02.2001 10.02.2002
 -----------
 1
:) Now AC, I had stupid mistake. 
 Edited by author 04.08.2012 18:24
I also had WA 19. There are some tricks to get AC in Java using java.util.Date. Take your tambourine and let's go!
 1. Divide milliseconds count by 24*60*60*1000.
 2. January's index is 0, not 1.
 3. Use, for example, year-1500 instead of year.
 4. Use Date's deprecated constructor.
 You don't have to care about all those details.Use GregorianCalendar it will take care everything for you.
#include <iostream>#include <cstring>
 #include <fstream>
 #include <string>
 using namespace std;
 char ch[20];
 int x[200];
 
 struct data
 {
 int d,m,y;
 };
 
 struct mas
 {
 data d1,d2,d3;
 };
 mas a[200];
 int n;
 
 void work(int i,int t)
 {
 char day[10];
 char month[10];
 char year[15];
 day[0]=ch[0];
 day[1]=ch[1];
 month[0]=ch[3];
 month[1]=ch[4];
 year[0]=ch[6];
 year[1]=ch[7];
 year[2]=ch[8];
 year[3]=ch[9];
 if (t==1)
 {
 a[i].d1.d=atoi(day);
 a[i].d1.m=atoi(month);
 a[i].d1.y=atoi(year);
 }
 else if (t==2)
 {
 a[i].d2.d=atoi(day);
 a[i].d2.m=atoi(month);
 a[i].d2.y=atoi(year);
 }
 else
 {
 a[i].d3.d=atoi(day);
 a[i].d3.m=atoi(month);
 a[i].d3.y=atoi(year);
 }
 }
 
 bool nahanj(int year)   // this checks if the year has 366 or 365 days
 {
 if (year%400==0) return 1;
 if (year%100==0) return 0;
 if (year%4==0) return 1;
 else return 0;
 }
 
 int get_year(int year)   //  this returns  how many days has the year
 {
 if (nahanj(year)) return 366;
 return 355;
 }
 
 int get_month(int a,int year) // this returns  how many days has the month
 {
 if (a==4 || a==6 || a==9 || a==11) return 30;
 if (a==2 && nahanj(year)) return 29;
 if (a==2 && !nahanj(year)) return 28;
 else return 31;
 }
 
 int get_life(int i0)  // and this returns how many year lived the person
 {
 int i;
 int sum1(0),sum2(0),sum(0);
 for(i=1700;i<a[i0].d1.y;i++) sum1+=get_year(i);
 for(i=1;i<a[i0].d1.m;i++) sum1+=get_month(i,a[i0].d1.y);
 sum1+=a[i0].d1.d;
 
 
 for(i=1700;i<a[i0].d3.y;i++) sum2+=get_year(i);
 for(i=1;i<a[i0].d3.m;i++) sum2+=get_month(i,a[i0].d3.y);
 sum2+=a[i0].d3.d;
 sum=sum2-sum1;
 
 return sum;
 }
 
 int main()
 {
 //ifstream cin("input.txt");
 int i,m(-1),pos(-1);
 cin>>n;
 for(i=0;i<n;i++)
 {
 cin>>ch;
 work(i,1);
 cin>>ch;
 work(i,2);
 cin>>ch;
 work(i,3);
 }
 for(i=0;i<n;i++) x[i]=get_life(i);
 for(i=0;i<n;i++)
 {
 if (x[i]>m)
 {
 m=x[i];
 pos=i;
 }
 }
 cout<<pos+1<<endl;
 return 0;
 }
 
 
 Edited by author 01.07.2011 19:17
 Just trip: scanf( "%ld.%ld.%ld", &d, &m, &y );No. This is unnecessary information.Can't understand why we need date starting from which person was the oldest.Also can't understand why this solution gets WA3.
 Can anyone help?
 
 import java.util.GregorianCalendar;
 import java.util.Scanner;
 
 public class P1759 {
 public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 int n = Integer.valueOf(scanner.nextLine());
 GregorianCalendar birth = (GregorianCalendar) GregorianCalendar.getInstance();
 GregorianCalendar death = (GregorianCalendar) GregorianCalendar.getInstance();
 long max = 0;
 int result = 0;
 long longestLiveDeath = 0;
 for (int i = 0; i < n; i++) {
 String[] dates = scanner.nextLine().split("\\s");
 
 set(birth, dates[0]);
 set(death, dates[2]);
 long liveTime = death.getTimeInMillis() - birth.getTimeInMillis();
 if (liveTime > max || (liveTime == max && death.getTimeInMillis() < longestLiveDeath)) {
 max = liveTime;
 longestLiveDeath = death.getTimeInMillis();
 result = i;
 }
 }
 System.out.println(result + 1);
 }
 
 private static void set(GregorianCalendar date, String sDate) {
 String[] split = sDate.split("\\.");
 date.set(Integer.valueOf(split[2]), Integer.valueOf(split[1]), Integer.valueOf(split[0]));
 }
 }
 
 Edited by author 24.03.2011 13:45
Pascal's type TDateTime (module SysUtils) allow decide this problem in 10 strings.Always format input isdd.mm.yyyy dd.mm.yyyy dd.mm.yyyy
 dd.mm.yyyy dd.mm.yyyy dd.mm.yyyy
 or may be (for example)
 2
 dd.mm.yyyy
 dd.mm.yyyy dd.mm.yyyy dd.mm.yyyy dd.mm.yyyy dd.mm.yyyy
 ?
 
 
 Edited by author 09.05.2010 02:02
 Format isdd.mm.yyyy dd.mm.yyyy dd.mm.yyyy
 dd.mm.yyyy dd.mm.yyyy dd.mm.yyyy
Give my please 6 test
 Edited by author 20.03.2010 15:04
 I used class DataTimeAnd no problem :)
 | 
 |