UVA 11947 Cancer or Scorpio 水题
Cancer or Scorpio
Time Limit: 1 Sec Memory Limit: 256 MB
题目连接
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3098
Description
Alice and Michael is a young couple who are planning on having their first child. Their wish their son Nelson was born on a special date for both of them.
Alice has investigated in the internet and has found that the period of gestation is forty weeks. These forty weeks begin to count on the first day of the last menstrual cycle.
Michael is passionate about astrology and even more about the zodiac signs, he has asked Alice to investigate the range of dates that correspond to each sign.
Sign | Begin | End |
Aquarius | January, 21 | February, 19 |
Pisces | February, 20 | March, 20 |
Aries | March, 21 | April, 20 |
Taurus | April, 21 | May, 21 |
Gemini | May, 22 | June, 21 |
Cancer | June, 22 | July, 22 |
Leo | July, 23 | August, 21 |
Virgo | August, 22 | September, 23 |
Libra | September, 24 | October, 23 |
Scorpio | October, 24 | November, 22 |
Sagittarius | November, 23 | December, 22 |
Capricorn | December, 23 | January, 20 |
Alice and Michael ask for help to calculate the date of birth of their son Nelson and his zodiac sign.
Input
The first line of input contains a single integer N, ( 1N1000) which is the number of datasets that follow.
Each dataset consists of a single line of input that contains only eight digits that represent the date of the first day of the last menstrual cycle in format MMDDYYYY.
Output
For each dataset, you should generate one line of output with the following values: The dataset number as a decimal integer (start counting at one), a space, the date of birth in format MM/DD/YYYY, a space, and the name (in lowercase) of zodiac sign that correspond according to the date of birth.
Note: Considers leap years.
Sample Input
2 01232009 01232008
Sample Output
HINT
题意
啊,有个妹子怀孕了,怀孕40周,然后问你这个孩子什么时候出生,出生后的星座是啥
题解:
啊,这个40周是什么鬼啊,我跑了一下样例,发现应该是271天,于是我就改成271,结果一发就交过了……
这道题真是迷啊
代码:
//qscqesze #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <sstream> #include <queue> #include <typeinfo> #include <fstream> #include <map> typedef long long ll; using namespace std; //freopen("D.in","r",stdin); //freopen("D.out","w",stdout); #define sspeed ios_base::sync_with_stdio(0);cin.tie(0) #define maxn 200001 #define mod 10007 #define eps 1e-9 //const int inf=0x7fffffff; //无限大 const int inf=0x3f3f3f3f; /* */ //************************************************************************************** inline ll read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int buf[10]; inline void write(int i) { int p = 0;if(i == 0) p++; else while(i) {buf[p++] = i % 10;i /= 10;} for(int j = p-1; j >=0; j--) putchar('0' + buf[j]); printf("\n"); } int month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int month1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int check_year(int x) { if(x%400==0) return 1; if(x%4==0&&x%100!=0) return 1; return 0; } string check(int x,int y) { string ans; if(x==1) { if(y<=20) { ans="capricorn"; return ans; } else { ans="aquarius"; return ans; } } else if(x==2) { if(y<=19) { ans="aquarius"; return ans; } else { ans="pisces"; return ans; } } else if(x==3) { if(y<=20) { ans="pisces"; return ans; } else { ans="aries"; return ans; } } else if(x==4) { if(y<=20) { ans="aries"; return ans; } else { ans="taurus"; return ans; } } else if(x==5) { if(y<=21) { ans="taurus"; return ans; } else { ans="gemini"; return ans; } } else if(x==6) { if(y<=21) { ans="gemini"; return ans; } else { ans="cancer"; return ans; } } else if(x==7) { if(y<=22) { ans="cancer"; return ans; } else { ans="leo"; return ans; } } else if(x==8) { if(y<=21) { ans="leo"; return ans; } else { ans="virgo"; return ans; } } else if(x==9) { if(y<=23) { ans="virgo"; return ans; } else { ans="libra"; return ans; } } else if(x==10) { if(y<=23) { ans="libra"; return ans; } else { ans="scorpio"; return ans; } } else if(x==11) { if(y<=22) { ans="scorpio"; return ans; } else { ans="sagittarius"; return ans; } } else if(x==12) { if(y<=22) { ans="sagittarius"; return ans; } else { ans="capricorn"; return ans; } } } int main() { int t=read(); for(int cas=1;cas<=t;cas++) { string s; cin>>s; char ch; int day=0,mon=0,ye=0; ch=s[0]; mon+=ch-'0'; ch=s[1]; mon=mon*10+ch-'0'; ch=s[2]; day+=ch-'0'; ch=s[3]; day=day*10+ch-'0'; ch=s[4]; ye+=ch-'0'; ch=s[5]; ye=ye*10+ch-'0'; ch=s[6]; ye=ye*10+ch-'0'; ch=s[7]; ye=ye*10+ch-'0'; int now=0; while(now<271) { now++; day++; //cout<<mon<<" "<<day<<" "<<ye<<" "<<now<<endl; if(check_year(ye)) { if(day>=month[mon]) { day=1; mon++; if(mon>12) { mon=1; ye++; } } } else { if(day>=month1[mon]) { day=1; mon++; if(mon>12) { mon=1; ye++; } } } } if(mon<10) cout<<cas<<" 0"<<mon; else cout<<cas<<" "<<mon; if(day<10) cout<<"/0"<<day<<"/"<<ye<<" "<<check(mon,day)<<endl; else cout<<"/"<<day<<"/"<<ye<<" "<<check(mon,day)<<endl; } }