ZOJ 3326 An Awful Problem 模拟

 

只有在 Month 和 Day 都为素数的时候才能得到糖

那就模拟一遍时间即可.

 

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler

#include <stdio.h>

#include <iostream>

#include <fstream>

#include <cstring>

#include <cmath>

#include <stack>

#include <string>

#include <map>

#include <set>

#include <list>

#include <queue>

#include <vector>

#include <algorithm>

#define Max(a,b) (((a) > (b)) ? (a) : (b))

#define Min(a,b) (((a) < (b)) ? (a) : (b))

#define Abs(x) (((x) > 0) ? (x) : (-(x)))

#define MOD 1000000007

#define pi acos(-1.0)



using namespace std;



typedef long long           ll      ;

typedef unsigned long long  ull     ;

typedef unsigned int        uint    ;

typedef unsigned char       uchar   ;



template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}

template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;}



const double eps = 1e-7      ;

const int N = 210            ;

const int M = 1100011*2      ;

const ll P = 10000000097ll   ;

const int MAXN = 10900000    ;



int month1[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int month2[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};



bool run (int x) {

    if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0) return true;

    return false;

}



bool prime (int num){

    if (num == 1)    return false;

    for (int i = 2; i <= sqrt(num); ++i){

        if (num % i == 0)    return false;

    }

    return true;

}



int main() {

    std::ios::sync_with_stdio(false);

    int i, j, t, k, u, v, numCase = 0;

    int y1, y2, m1, m2, d1, d2;

    cin >> t;

    while (t--) { 

        cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;

        int ans = 0;

        while (y1 < y2) {

            if (!run (y1)){

                for (; m1 <= 12; ++m1) {

                    for (; d1 <= month1[m1]; ++d1){

                        if (prime(m1) && prime(d1))   ++ans;

                    }

                    d1 = 1;

                }

            } else{

                for (; m1 <= 12; ++m1) {

                    for (; d1 <= month2[m1]; ++d1) {

                        if (prime(m1) && prime(d1))   ++ans;

                    }

                    d1 = 1;

                }

            }

            m1 = 1;

            ++y1;

        }

        if (!run (y1)) {

            for (; m1 < m2; ++m1) { 

                for (; d1 <= month1[m1]; ++d1) {

                    if (prime(m1) && prime(d1))   ++ans;

                }

                d1 = 1;

            }

            for (; d1 <= d2; ++d1) {

                if (prime(m2) && prime(d1))   ++ans;

            }

        } else{

            for (; m1 < m2; ++m1) {

                for (; d1 <= month2[m1]; ++d1) {

                    if(prime(m1) && prime(d1))   ++ans;

                }

                d1 = 1;

            }

            for (; d1 <= d2; ++d1) {

                if(prime(m2) && prime(d1))   ++ans;

            }

        }

        cout << ans << endl;

    }



    return 0;

}

 

你可能感兴趣的:(ZOJ)