牛客练习赛 A题 筱玛的快乐

链接:https://ac.nowcoder.com/acm/contest/342/A
来源:牛客网

筱玛的快乐
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

筱玛是个快乐的男孩子。
寒假终于到了,筱玛决定请他的朋友们一起来快乐。
对于筱玛来说,最快乐的事情莫过于翻看万年历上的日期了。
一个日期是“快乐”的,当且仅当这一年的年份是一个质数,且将月份、日期写成"MM-DD"的形式后是对称的。如:"2003-01-10"是“快乐”的。
筱玛有n个小伙伴,每个小伙伴都会提出一个问题,即:从"2000-01-01"这一天开始,第k个“快乐”的日期是什么。

输入描述:

第一行一个整数n。
接下来n行,每行一个数字k,表示一次询问。

输出描述:

输出共n行,每行一个形如"YYYY-MM-DD"的日期表示答案。
示例1

输入

复制
3
1
23
48

输出

复制
2003-01-10
2027-11-11
2063-12-21

备注:

1≤n≤10
6

保证答案存在且答案年份为4位数。

题意:中文题面,读起来没问题吧?
思路:寻找规律,然后预处理2000~9999的素数,然后直接输出。
这题卡IO,,很无语,要用scanf和printf才能过,然而我用的快读。

我的AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
bool ispreme(int x)
{
    for(int i=2;i<x;i++)
    {
        if(x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
char m[50][50]={"12-21","01-10","02-20","03-30","10-01","11-11"};
int main()
{

    vector<int> v;
    repd(i,2000,9999)
    {
        if(ispreme(i))
        {
            v.pb(i);
//            cout<<i<<" ";
        }
    }
    int t;
    gg(t);
    int k;
    while(t--)
    {
        gg(k);
        int year=v[(k-1)/6];
        k=k%6;
//        cout<<year<<"-"<<m[k]<<endl;
        printf("%d-%s\n",year,m[k]);
    }
    return 0;
}

inline void getInt(int* p) {
    char ch;
    do {
        ch = getchar();
    } while (ch == ' ' || ch == '\n');
    if (ch == '-') {
        *p = -(getchar() - '0');
        while ((ch = getchar()) >= '0' && ch <= '9') {
            *p = *p * 10 - ch + '0';
        }
    }
    else {
        *p = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9') {
            *p = *p * 10 + ch - '0';
        }
    }
}

 



posted @ 2019-01-15 17:20  茄子Min  阅读(247)  评论(0编辑  收藏  举报