http://poj.org/problem?id=3110
#include <stdio.h>
#include <queue>
using namespace std;
int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int getDays( int dd, int mm, int year ) {
int res = (year-1700)*365 + (year-1700-1)/4 + days[mm-1] + dd;
if( year > 1800 )
res--;
if( year > 1900 )
res--;
if( mm > 2 && year % 4 == 0 && ( year % 100 != 0 || year % 400 ==0 ) )
res ++;
return res;
}
void toDate( int &dd, int &mm, int &year, int s ) {
int i, j, t;
year = s/366 + 1700;
while( getDays( 1, 1, year+1 ) <= s )
year++;
for( i=1; i<=12; i++ ) {
t = days[i]-days[i-1];
if( i == 2 && year%4 == 0 && ( year%100!=0 || year%400==0 ) )
t++;
for( j=1; j<=t; j++ )
if( getDays( j, i, year ) == s ) {
dd = j, mm = i;
return;
}
}
return;
}
struct Exam {
char w[12];
int dd, mm, yy;
int s, t;
}exam[50000];
struct Cmp {
bool operator()( Exam *a, Exam *b ) const {
return a->t < b->t;
}
};
priority_queue< Exam*, vector<Exam*>, Cmp > q;
bool cmp( const Exam &a, const Exam &b ) {
return a.s>b.s;
}
int main( ) {
int i, n, ans;
bool key = true;
for( i=1; i<=12; i++ )
days[i] += days[i-1];
scanf( "%d", &n );
for( i=0; i<n; i++ ) {
scanf( "%s%d.%d.%d%d", &exam[i].w, &exam[i].dd, &exam[i].mm, &exam[i].yy, &exam[i].t );
exam[i].s = getDays( exam[i].dd, exam[i].mm, exam[i].yy );
exam[i].t = exam[i].s-exam[i].t;
}
sort( exam, exam+n, cmp );
ans = 10000000;
for( i=0; i<=n && key; i++ ) {
while( !q.empty() && ( i== n || ans > exam[i].s ) ) {
if( ans < q.top()->t ) {
key = false;
break;
}
ans--;
q.pop();
}
if( i < n ) {
q.push( &exam[i] );
ans = exam[i].s-1;
}
}
if( !key )
printf( "Impossiblen" );
else {
int a, b, c;
toDate( a, b, c, ans+1 );
printf( "%02d.%02d.%04dn", a, b, c );
}
return 0;
}
Meta
-
Recent Posts
Recent Comments
Archives
- May 2024
- April 2023
- February 2023
- January 2023
- December 2022
- November 2022
- September 2022
- June 2022
- July 2021
- January 2021
- February 2020
- September 2019
- March 2018
- February 2018
- August 2016
- July 2016
- June 2016
- May 2016
- April 2016
- March 2016
- February 2016
- January 2016
- December 2015
- November 2015
- October 2015
- September 2015
- August 2015
- July 2015
- June 2015
- May 2015
- April 2015
- March 2015
- February 2015
- January 2015
- December 2014
- November 2014
- October 2014
- September 2014
- August 2014
- July 2014
- June 2014
- May 2014
- April 2014
- March 2014
- February 2014
- January 2014
- December 2013
- November 2013
- October 2013
- September 2013
- August 2013
- July 2013
- June 2013
- May 2013
- April 2013
- March 2013
- February 2013
- January 2013
- December 2012
- November 2012
- October 2012
- September 2012
- August 2012
- July 2012
- June 2012
- May 2012
- April 2012
- March 2012
- February 2012
- January 2012
- December 2011
- November 2011
- October 2011
- September 2011
- August 2011
- July 2011
- June 2011
- May 2011
- April 2011
- March 2011
- February 2011
- January 2011
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
Categories
