Условие:
http://acm.timus.ru/problem.aspx?space=1&num=1440
Задача в принципе не моя, на аккуратное кодирование.
Я старалсо, но не заходит, грит WA5
Посмотрите код, может увидите ошибку.
#include <iostream> #include <string> #include <map> using namespace std; string day; string month; int date; int mn, mx; int num[10]; string days[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; string months[4] = {"September", "October", "November", "December"}; map <int, string> ISd; map <string, int> SId; map <int, string> ISm; map <string, int> SIm; int monthl[4] = {30, 31, 30, 24}; void readdata(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); cin >> day; cin >> month; cin >> date >> mn >> mx; } void mapcreate(){ for(int i=0;i<7;i++){ ISd[i]=days[i]; SId[days[i]]=i; } for(int i=0;i<4;i++){ ISm[i]=months[i]; SIm[months[i]]=i; } } int curmonth; int curday; int limmonth; int limday; void precalc(){ curmonth = 0; curday = SIm[day]; curday++; if(curday==7)curday=0; limmonth = SIm[month]; limday = date; limday--; date=1; while(curmonth < limmonth || date < limday ){ num[curday]++; curday++; date++; if(curday == 7)curday=0; if(date == monthl[curmonth]){ curmonth++; date=0; } } } bool found = false; string ans; char ch; string s = ""; void recsolve(int shag, int sum){ if(shag == 8 || found){ return; }else if(sum >=mn && sum <=mx){ found = true; ans = s; }else { if(num[shag]){ s.push_back(shag+48); recsolve(shag+1, sum+num[shag]); s.erase(s.size()-1, 1); } recsolve(shag+1, sum); } } int main(){ readdata(); mapcreate(); precalc(); recsolve(0, 0); if(!found) cout << "Impossible\n"; else { cout << ans.size() << endl; for(int i=0;i<ans.size();i++){ if(num[ans[i]-48]){ cout << days[ans[i]-48] << endl; } } } return 0; }