cf 158div.2 B. Ancient Prophesy

  要求找到严格符合的dd-mm-yyyy的出现次数最多的日期,是严格符合,多个-或少个0都不可以,所以这题直接匹配就可以了

  比赛时候一直写的是分割,WA了n次……

 

这题主要学到了stringstream和strtok的用法。

strtok(s,"-");

strtok(NULL,"-"); 

只是对原字符串进行分割,并没有复制给一个新的,返回的指针是原字符串的位置。

直接匹配:

 

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <map>
#define INF 1E9
using namespace std;
char s[100010];
const int D[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
map<string,int> num;
int main()
{
    gets(s);
    int i,day,month,year,Max=0;
    stringstream st;
    string t,ans;
    for(i=2;s[i+7];i++)
    {
        if(s[i]!='-'||s[i+3]!='-'||s[i+1]=='-'||s[i+2]=='-')continue;
        if(s[i-1]=='-'||s[i-2]=='-'||s[i+4]=='-'||s[i+6]=='-'||s[i+7]=='-'||s[i+5]=='-')continue;
        day=s[i-1]-'0'+(s[i-2]-'0')*10;
        month=(s[i+1]-'0')*10+s[i+2]-'0';
        year=(s[i+4]-'0')*1000+(s[i+5]-'0')*100+(s[i+6]-'0')*10+s[i+7]-'0';
        if(year<2013||year>2015)continue;
        if(month<1||month>12)continue;
        if(day<1||day>D[month])continue;
        if(day<10)st<<"0";
        st<<day<<"-";
        if(month<10)st<<"0";
        st<<month<<"-"<<year;
        st>>t;
        st.clear();
        num[t]++;
        if(num[t]>Max)
        {
            Max=num[t];
            ans=t;
        }
        //cout<<t<<endl;
    }
    cout<<ans<<endl;
}

划分:

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <map>
#define INF 1E9
using namespace std;
char s[100010];
map<string,int> num;
int Max=0;
string ans;
int D[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char *p,*ll,*l,*now;
int main()
{
    gets(s);
    ll=strtok(s,"-");
    l=strtok(NULL,"-");
    bool flag=1,rflag;
    long long year,month,day;
    stringstream tt;
    string t;
    for(;now=strtok(NULL,"-");ll=l,l=now)
    {
        flag=1;
        int len=strlen(now);
        char te;
        if(len>4)
        {
            te=now[4];
            now[4]='\0';
        }
        if(len<4)continue;
        sscanf(now,"%I64d",&year);
        if(len>4) now[4]=te;
        if(*(l-1)=='-'||*(l+3)=='-')continue;
        switch(year)
        {
            case 2013:case 2014:case 2015:break;
            default:flag=0;break;
        }
        if(!flag)continue;
        if(strlen(l)!=2)continue;
        sscanf(l,"%I64d",&month);
        if(month<1||month>12)continue;
        sscanf(ll,"%I64d",&day);
        day%=100;
        if(day<1||day>D[month-1])continue;
        if(day<10)tt<<"0";
        tt<<day<<"-";
        if(month<10)tt<<"0";
        tt<<month<<"-"<<year;
        tt>>t;
        tt.clear();
        num[t]++;
        if(num[t]>Max)
        {
            Max=num[t];
            ans=t;
        }
    }
    cout<<ans<<endl;
}

 

时间: 2024-11-08 19:08:02

cf 158div.2 B. Ancient Prophesy的相关文章

用C#开发.NET CF 蓝牙通信模块

用C#开发.NET CF 蓝牙通信模块在Windows Mobile软件开发中.Net正扮演着日益重要的角色,我们已经可以看到很多用.Net CF开发的软件,这些软件涉及到了日常应用的方方面面.在智能设备的软件开发中,无线互联是一个相当重要的一块,我们可以看到,红外几乎是所有智能设备的标配,而蓝牙也日益在越来越多的智能设备上出现,有了硬件,显然要有相应的软件相关的应用. 我们也知道,用.NET CF开发红外通信应用时相当轻松的,因为.NET CF中有一个命名空间System.Net.IrDA就是

算法题:HDU 3460 Ancient Printer

链接: http://acm.hdu.edu.cn/showproblem.php?pid=3460 题目: Ancient Printer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 955    Accepted Submission (s): 441 Problem Description The contest is be

win7玩cf不能全屏解决方法

使用win7的CF玩家容易遇到CF不能全屏的问题,本文将介绍一种不需要更改注册表的简单方法,按步骤依次设置即可解决在win7下CF不能全屏的问题: CF不能全屏的详细解决步骤: 第一步:在桌面空白的地方点击鼠标右键,弹出菜单中选择"屏幕分辨率": 第二步:在弹出的"更改显示器的外观"的右下角,点击"高级设置": 第三步:点击切换到最顶端的"英特尔(R)图形和媒体控制面板"中: 第四步:在"英特尔(R)图形和媒体控制面

CF游戏更新后win8系统不能全屏怎么办?

CF游戏更新后win8系统不能全屏怎么办?   win8不能全屏是跟官方最近更新的v3.5.9版本相关,在更新中,我们看见了优化win10全屏,那么就有可能是官方优化好win10后win8又出问题了! 那么又该如何解决? 下面百事网小编就提供一个简单调分辨率和调整游戏分辨率就能让游戏全屏的方法! 右键桌面选择屏幕分辨率: 调到1024x768 保存更改! 然后进入游戏,然后游戏的分辨率调到1024x768

win8系统玩cf、lol等大型游戏卡屏是怎么回事?

  win8系统玩cf.lol等大型游戏卡屏是怎么回事?          原因分析:其实从最初的xp或者win7直接升级到win8系统之后,大家很容易忽略了系统的显卡驱动,尤其是一些大型游戏对于显卡的要求可是很高的,一般这就是引起游戏卡屏最常见的原因了. 解决方法: 1.下载驱动精灵或者是驱动大师,然后就检测驱动,直接升级显卡驱动; 2.来使用驱动大师更新显卡驱动,以便来解决玩cf等游戏卡屏的问题; 3.运行驱动大师,然后选择驱动管理开始全面的驱动扫描.这时候一旦显示显卡驱动没有安装的话就直接

qq拼音怎么打cf空格

  qq拼音打cf空格方法: 1.首先切换自己的输入法到QQ拼音 默认是按住shift+ctrl键切换,如果你设置了其它键切换,其按照你的切换方式切换到QQ拼音 2.切换后可看到一个QQ拼音输入框,如下图,然后输入v1选择a后就是空格效果( )许多游戏用的空格都是这么打出来的比如说CF名字中的空格 其他输入法应该也可以打cf空格,小编这里就不一一演示了!

Win7cnf登陆不上提示CF File Watcher怎么办?

  Win7cnf登陆不上提示CF File Watcher怎么办? 1.下载智能IP代理软件, 2.下载安装完毕后运行,弹出主页面. 3.点击"智能搜索最新代理IP"搜索出一些IP后点击"停止搜索. 4.点击"验证全部IP"验证一会后点击"停止验证"和"清除不合格IP". 5.任意双击一个可行IP即可. 6.打开QQ,点击右上方的齿轮按钮. 7.弹出一个代理窗口. 8.点击"不使用代理"旁的三角

win7系统cf截图存放在哪个文件夹?

win7系统cf截图存放在哪个文件夹?   最近有用户反应,打完游戏之后,想打开截图的图片,那么在Win7系统中玩穿越火线截的图都在哪里呢?下面小编给大家分享下win7系统下CF截图图片所在位置. 方法一: 1.打开计算机; 2.在左侧点击"库",在右侧点击"文档"; 3.在文档中双击打开:CFSyetem 文件夹即可. 方法二:文档中没有CFSyetem 的情况下 1.打开计算机,在右侧搜索框中直接搜索[CFSyetem ]; 2.在搜索结果中一定会出现[CFSy

Win7下玩CF无法全屏的解决方法

不少Win7用户反映玩CF不能全屏,在CF游戏设置里的全屏的勾打不上去,如何解决Win7下玩CF无法全屏呢,其实Win7下玩CF无法全屏是正常现象,有些游戏本身并没有提供宽屏分辨率支持.其图形界面都是按照一定比例(如 4:3)来设计的,在宽屏显示器上就会在两边留有黑边从而保持图形的长宽比例正常.下面笔者提供两种方法来解决解决Win7下玩CF无法全屏的现象. 解决Win7下玩CF无法全屏方法一:修改注册表 点击开始菜单,在搜索框内输入"Regedit"并回车打开注册表编辑器,定位到&qu