Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <cstdlib>
- #define IFILE "datums.dat"
- #define OFILE "datums.rez"
- using namespace std;
- struct _dienas { int d[10]; int day; int month; } dienas[366];
- int chk(int a1,int a2,int a3,int a4){
- if( a4 % 2 == 1 ) return 0;
- int gads = a1*1000+a2*100+a3*10+a4;
- if( gads % 400 == 0 ) return 1;
- if( gads % 100 == 0 ) return 0;
- return (gads % 4 == 0 ? 1 : 0);
- }
- int variants(int iday,int a1,int a2, int a3, int a4){
- int r=0;
- if( a1 == 0 && a2 == 0 && a3 == 0 && a4 == 0 ) return 0;
- if( iday != 59 ) return 24;
- r += chk(a1,a2,a3,a4);
- r += chk(a1,a2,a4,a3);
- r += chk(a1,a3,a2,a4);
- r += chk(a1,a3,a4,a2);
- r += chk(a1,a4,a2,a3);
- r += chk(a1,a4,a3,a2);
- r += chk(a2,a1,a3,a4);
- r += chk(a2,a1,a4,a3);
- r += chk(a2,a3,a1,a4);
- r += chk(a2,a3,a4,a1);
- r += chk(a2,a4,a1,a3);
- r += chk(a2,a4,a3,a1);
- r += chk(a3,a1,a2,a4);
- r += chk(a3,a1,a4,a2);
- r += chk(a3,a2,a1,a4);
- r += chk(a3,a2,a4,a1);
- r += chk(a3,a4,a1,a2);
- r += chk(a3,a4,a2,a1);
- r += chk(a4,a1,a2,a3);
- r += chk(a4,a1,a3,a2);
- r += chk(a4,a2,a1,a3);
- r += chk(a4,a2,a3,a1);
- r += chk(a4,a3,a1,a2);
- r += chk(a4,a3,a2,a1);
- return r;
- }
- int main(int argc, char *argv[]) {
- ifstream is;
- ofstream os;
- int d[10],tmp[10],i,j,k,l,divs,y[4],rez=0;
- char c;
- bool canbe;
- for( i=0;i<10;i++) d[i] = 0;
- is.open(IFILE);
- for( i=0; i<8; i++){ is >> c; d[c-'0']++; }
- is.close();
- k = -1;
- for( i=1;i<=12;i++)
- for( j=1;j<=31;j++){
- if( ((i == 4 || i == 6 || i == 9 || i == 11) && (j==31)) || (i==2 && j>=30) ) continue;
- ++k;
- for( l=0;l<10;l++) dienas[k].d[l] = 0;
- dienas[k].d[i % 10]++;
- dienas[k].d[j % 10]++;
- dienas[k].d[i / 10]++;
- dienas[k].d[j / 10]++;
- dienas[k].day = j;
- dienas[k].month = i;
- }
- for( i=0; i<366; i++){
- canbe = true;
- divs = 1;
- for( j=0; j< 10; j++ ){
- tmp[j] = d[j] - dienas[i].d[j];
- switch(tmp[j]){
- case 4: divs *= 4;
- case 3: divs *= 3;
- case 2: divs *= 2;
- }
- if( tmp[j] < 0 ){
- canbe = false;
- break;
- }
- }
- if( canbe ){
- l = 0;
- for( j=0; j< 10; j++ ){
- while( tmp[j] > 0 ){ y[l++] = j; tmp[j]--; }
- }
- rez += variants(i,y[0],y[1],y[2],y[3])/divs;
- // cout<< endl <<dienas[i].day<<' '<<dienas[i].month<<' '<<y[0]<<y[1]<<y[2]<<y[3]<<' '<<rez;
- }
- }
- os.open(OFILE);
- os << rez;
- os.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement