zoukankan      html  css  js  c++  java
  • 牛客练习赛37

    A.筱玛的快乐

    题目描述:

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

    输入描述:

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

    输出描述:

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

    输入:

    3
    1
    23
    48
    

    输出:

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

    备注:

    1≤n≤(10^6),保证答案存在且答案年份为4位数。

    思路:

    线性筛O(1)打表,坑:卡C++的输入输出,要用C语言的输入输出==

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const LL maxn=3e6+5;
    const LL maxm=166670;
    int T,n;vector<LL> ans;bool isp[maxn];LL cnt=0,prime[maxn];
    char str[6][8]={"-12-21","-01-10","-02-20","-03-30","-10-01","-11-11"};
    void euler_sieve(){
        memset(isp,true,sizeof(isp));
        memset(prime,0,sizeof(prime));
        isp[0]=isp[1]=false;
        for(LL i=2;i<maxn;++i){
            if(isp[i])prime[cnt++]=i;
            for(LL j=0;j<cnt&&i*prime[j]<maxn;++j){
                isp[i*prime[j]]=false;
                if(i%prime[j]==0)break;
            }
        }
    }
    int main(){
        euler_sieve();ans.clear();
        for(LL i=0,num=0;num<maxm&&i<cnt;++i)
            if(prime[i]>2000LL)ans.push_back(prime[i]),num++;
        while(~scanf("%d",&T)){
            while(T--){
                scanf("%d",&n);
                printf("%lld%s
    ",ans[n/6+(n%6>0)-1],str[n%6]);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    poj 2560Freckles (krusual)
    ACRush 楼天成回忆录
    大腕版ACMICPC比赛
    POJ刷题
    DataGrid中添加DropdownList时的数据绑定
    【转帖】SQL Server各种日期计算方法(收藏)
    安全配置Win2000服务器
    C#写的一个代码生成器
    .Net 常用加密算法类
    实习之最
  • 原文地址:https://www.cnblogs.com/acgoto/p/10258675.html
Copyright © 2011-2022 走看看