| ||||||||||
| 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 | |||||||||
大水题一个#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cstdlib>
#include <sstream>
using namespace std;
string xqs[7] = {"SUN,", "MON,", "TUE,", "WED,", "THU,", "FRI,", "SAT,"};
string yues[13] = {" ", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
int Shi;
int Fen;
int Miao;
int ris[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int getXq(string xq){
for(int i = 0; i < 7; i++){
if(strcmp(xq.c_str(), xqs[i].c_str()) == 0){
return i;
}
}
return -1;
}
int getYue(string yue){
for(int i = 1; i <= 12; i++){
if(strcmp(yue.c_str(), yues[i].c_str()) == 0){
return i;
}
}
return 0;
}
int getNian(string nian){
int Nian = atoi(nian.c_str());
if(nian.length() == 2) return Nian + 1900;
return Nian;
}
void getSj(string sj){
stringstream ss(sj);
char fei;
ss >> Shi >> fei >> Fen >> fei >> Miao;
}
int getSqOfs(string sq){
if(sq.length() == 5){
int pureOffset = (sq[1]-'0') * 600 + (sq[2]-'0') * 60 + (sq[3]-'0') * 10 + sq[4]-'0';
if(sq[0] == '+') return 180 - pureOffset;
else return 180 + pureOffset;
}
switch(sq[0]){
case 'U': case 'u': case 'G': case 'g': return 180;
case 'E': case 'e': return 420;
case 'C': case 'c': return 480;
case 'M': case 'm': return 540;
case 'P': case 'p': return 600;
default: return 2147483647;
}
}
bool isRun(int &N){
if(N%4!=0 || (N%100==0 && N%400!= 0)) return 0;
return 1;
}
int RiofYue(int &Y, int &N){
if(!isRun(N) || Y!=2) return ris[Y];
return 29;
}
bool overflow(int &R, int &Y, int &N){
return R > RiofYue(Y, N);
}
void getNextRi(int &Ri, int &Yue, int &Nian){
//cout << 1 << endl;
Ri++;
if(overflow(Ri, Yue, Nian)){
Ri = 1;
Yue++;
if(Yue > 12){
//cout << 1 << endl;
Yue = 1;
Nian++;
}
}
}
void getLastRi(int &Ri, int &Yue, int &Nian){
Ri--;
if(Ri == 0){
Yue--;
if(Yue == 0){
Yue = 12;
Nian--;
}
Ri = RiofYue(Yue, Nian);
}
}
void getNewRi(int offsetRi, int &Ri, int &Yue, int &Nian){
if(offsetRi > 0){
for(int i = 0; i < offsetRi; i++){
getNextRi(Ri, Yue, Nian);
}
}
else{
for(int i = 0; i < -offsetRi; i++){
getLastRi(Ri, Yue, Nian);
}
}
}
void getNewXq(int offsetRi, int &Xq){
int ofs = (offsetRi + 14)%7;
Xq = (Xq + ofs)%7;
}
//SUN, 03 DEC 1996 12:10:35 +0300
void printMoscow(int Xq, int Ri, int Yue, int Nian, int Shi, int Fen, int Miao){
cout << xqs[Xq] << " ";
if(Ri < 10) cout << 0;
cout << Ri << " ";
cout << yues[Yue] << " ";
if(Nian < 10) cout << "000";
else if(Nian < 100) cout << "00";
else if(Nian < 1000) cout << "0";
cout << Nian << " ";
if(Shi < 10) cout << 0;
cout << Shi << ":";
if(Fen < 10) cout << 0;
cout << Fen << ":";
if(Miao < 10) cout << 0;
cout << Miao << " +0300";
}
int main() {
string xq, yue, nian, sj, sq;
int Ri;
cin >> xq >> Ri >> yue >> nian >> sj >> sq;
int Xq = getXq(xq);
int Yue = getYue(yue);
int Nian = getNian(nian);
getSj(sj);
int offsetFz = getSqOfs(sq);// in fz
//cout << offsetFz << endl;
Fen += offsetFz;
int offsetXs = 0;
if(Fen >= 60){
offsetXs = Fen / 60;
Fen %= 60;
}
else if(Fen < 0){
offsetXs = -((-Fen)/60+1);
Fen = 60 - (-Fen)%60;
if(Fen == 60){
Fen = 0;
offsetXs++;
}
}
if(offsetXs != 0){
Shi += offsetXs;
int offsetRi = 0;
if(Shi >= 24){
offsetRi = Shi / 24;
Shi %= 24;
}
else if(Shi < 0){
offsetRi = -((-Shi)/24+1);
Shi = 24 - (-Shi)%24;
if(Shi == 24){
Shi = 0;
offsetRi++;
}
}
if(offsetRi != 0){
getNewRi(offsetRi, Ri, Yue, Nian);
getNewXq(offsetRi, Xq);
}
}
//cout << Xq << endl;
printMoscow(Xq, Ri, Yue, Nian, Shi, Fen, Miao);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator