| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大水题,注意格式,PE的注意today is后面那个也需要保留3的宽度
另外就是相对重要度是按照从大到小而不是从小到大,我因为这个WA了一次!!!
#include <iostream>
#include <stdio.h>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
struct date{
int month;
int day;
date(int m, int d): month(m), day(d){}
date(){}
};
struct anniv{
int month;
int day;
int impt;
int bh;
string cont;
date getDate(){
return date(month, day);
}
};
bool operator<(const anniv& a1, const anniv& a2){
if(a1.month < a2.month) return true;
if(a1.month == a2.month && a1.day < a2.day) return true;
if(a1.month == a2.month && a1.day == a2.day && a1.impt > a2.impt) return true;
if(a1.month == a2.month && a1.day == a2.day && a1.impt == a2.impt && a1.bh < a2.bh) return true;
return false;
}
bool operator>(const anniv& a1, const anniv& a2){
return !(a1<a2);
}
vector<anniv> annivs;
vector<date> dates;
int year;
date nextDay(date now){
date temp = now;
temp.day ++;
if(temp.month == 2 && (temp.day == 30 || (temp.day == 29 && year%4 != 0))){
temp.month = 3;
temp.day = 1;
return temp;
}
if(temp.month == 1 || temp.month == 3 || temp.month == 5 || temp.month == 7 || temp.month == 8 || temp.month == 10 || temp.month == 12){
if(temp.day == 32){
temp.month ++;
temp.day = 1;
if(temp.month == 13) temp.month = 1;
return temp;
}
}
if(temp.month == 4 || temp.month == 6 || temp.month == 9 || temp.month == 11){
if(temp.day == 31){
temp.month ++;
temp.day = 1;
return temp;
}
}
return temp;
}
void quickSort(vector<anniv> &s, int l, int r)
{
if (l< r)
{
int i = l, j = r;
anniv x = s[l];
while (i < j)
{
while(i < j && s[j]> x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
int main() {
string s;
getline(cin, s);
stringstream ss(s);
ss >> year;
int bh = 0;
while(1){
getline(cin, s);
if(s[0] == '#') break;
int cur = 0;
char type = s[0]; cur ++;
while(s[cur] == ' ') cur++;
int Day, Month;
char shu1 = s[cur], shu2 = s[cur+1];
if(shu2 == ' '){
Day = shu1 - '0';
cur += 1;
}
else{
Day = 10 * (shu1-'0') + shu2 - '0';
cur += 2;
}
while(s[cur] == ' ') cur++;
shu1 = s[cur];
if(cur+1 < s.length()) shu2 = s[cur+1];
else shu2 = ' ';
if(shu2 == ' '){
Month = shu1 - '0';
cur += 1;
}
else{
Month = 10 * (shu1-'0') + shu2-'0';
cur += 2;
}
if(type == 'A'){
anniv temp;
temp.month = Month;
temp.day = Day;
while(s[cur] == ' ') cur++;
temp.impt = s[cur] - '0';
cur++;
while(s[cur] == ' ') cur++;
temp.cont = s.substr(cur);
int len = temp.cont.length();
int Len = len;
for(int i = len-1; i >= 0; i--){
if(temp.cont[i] == ' '){
Len--;
continue;
}
break;
}
temp.cont = temp.cont.substr(0, Len);
temp.bh = bh;
bh ++;
annivs.push_back(temp);
}
else{
date dtemp;
dtemp.month = Month;
dtemp.day = Day;
dates.push_back(dtemp);
}
}
int numOfDates = dates.size();
int numOfAnnivs = annivs.size();
quickSort(annivs, 0, numOfAnnivs-1);
/*
for(int i = 0; i < numOfAnnivs; i++){
cout << annivs[i].day << " " << annivs[i].month << " " << annivs[i].impt << " " << annivs[i].cont << endl;
}
*/
int annivBeginIdx[13][32];
int annivNum[13][32] = {0};
for(int i = 0; i < numOfAnnivs; i++){
if(annivNum[annivs[i].month][annivs[i].day] == 0){
annivBeginIdx[annivs[i].month][annivs[i].day] = i;
}
annivNum[annivs[i].month][annivs[i].day] ++;
}
for(int i = 0; i < numOfDates; i++){
date Date = dates[i];
printf("Today is:");
if(Date.day < 10) printf(" ");
printf(" %d", Date.day);
if(Date.month < 10) printf(" ");
printf(" %d", Date.month);
printf("\n");
//printf("Today is: %d %d\n", Date.day, Date.month);
if(annivNum[Date.month][Date.day] > 0){
int first = annivBeginIdx[Date.month][Date.day];
int num = annivNum[Date.month][Date.day];
vector<anniv> todayAnnivs;
for(int j = first; j < first+num; j++){
todayAnnivs.push_back(annivs[j]);
}
for(int j = 1; j < num; j++){
for(int k = j; k > 0; k--){
if(todayAnnivs[k].bh > todayAnnivs[k-1].bh) break;
anniv tmp = todayAnnivs[k];
todayAnnivs[k] = todayAnnivs[k-1];
todayAnnivs[k-1] = tmp;
}
}
for(int j = 0; j < num; j++){
if(Date.day < 10) printf(" ");
printf(" %d", Date.day);
if(Date.month < 10) printf(" ");
printf(" %d", Date.month);
printf(" *TODAY* ");
printf("%s\n", todayAnnivs[j].cont.c_str());
}
}
date futureDate = Date;
for(int j = 0; j <= 6; j++){
futureDate = nextDay(futureDate);
int num = annivNum[futureDate.month][futureDate.day];
if(num == 0) continue;
int first = annivBeginIdx[futureDate.month][futureDate.day];
for(int k = first; k < first+num; k++){
if(annivs[k].impt - j <= 0) continue;
int relImpt = annivs[k].impt - j;
if(futureDate.day < 10) printf(" ");
printf(" %d", futureDate.day);
if(futureDate.month < 10) printf(" ");
printf(" %d ", futureDate.month);
for(int l = 0; l < relImpt; l++) printf("*");
for(int l = 0; l < 8-relImpt; l++) printf(" ");
printf("%s\n", annivs[k].cont.c_str());
}
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator