Условие:
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;
}