Baby Ming and phone number

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1501    Accepted Submission(s): 399

Problem Description
Baby Ming collected lots of cell phone numbers, and he wants to sell them for money.

He thinks normal number can be sold for b yuan, while number with following features can be sold for a yuan.

1.The last five numbers are the same. (such as 123-4567-7777)

2.The last five numbers are successive increasing or decreasing, and the diffidence between two adjacent digits is 1. (such as 188-0002-3456)

3.The last eight numbers are a date number, the date of which is between Jar 1st, 1980 and Dec 31th, 2016. (such as 188-1888-0809,means August ninth,1888)

Baby Ming wants to know how much he can earn if he sells all the numbers.

 
Input
In the first line contains a single positive integer T, indicating number of test case.

In the second line there is a positive integer n, which means how many numbers Baby Ming has.(no two same phone number)

In the third line there are 2 positive integers a,b, which means two kinds of phone number can sell a yuan and b yuan.

In the next n lines there are n cell phone numbers.(|phone number|==11, the first number can’t be 0)

1≤T≤30,b<1000,0<a,n≤100,000

 
Output
How much Baby Nero can earn.
 
Sample Input
1
5
100000 1000
12319990212
11111111111
22222223456
10022221111
32165491212
 
Sample Output
302000
 
分步判断是否符合题意即可   休要细心,代码未ac  还有细节未处理好  先记录下来
#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include<algorithm>
#define LL long long
#define PI atan(1.0)*4
#define DD doublea
#define MAX 100100
#define mod 10007
using namespace std;
int s[MAX][15];
char s1[MAX][15];
int op1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int op2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int five(int x)//判断后五位
{
int i,j;
char y=s[x][6];
int flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=y)
{
flag=0;
break;
}
}
if(flag==1) return 1;
flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=s[x][i-1]+1)
{
flag=0;
break;
}
}
if(flag==1) return 1;
else return 0;
}
int judge(int x)//判断闰年
{
if((x%4==0&&x%100!=0)||x%400==0)
return 1;
else return 0;
}
int eight(int x) //判断后八位
{
int i,j;
int flag=1;
int sum=s[x][3];
int mouth=s[x][7]*10+s[x][8];
int day=s[x][9]*10+s[x][10];
for(i=4;i<=6;i++)
sum=sum*10+s[x][i];
if(sum<1980||sum>2016||mouth<1||mouth>12)
return 0;
if(sum==1980)
{
if(mouth<7||mouth>12)
return 0;
if(day==0||day>op1[mouth])
return 0;
}
if(judge(sum))
{
if(day==0||day>op2[mouth])
return 0;
}
if(!judge(sum))
{
if(day==0||day>op1[mouth])
return 0;
}
return 1;
}
int main()
{
int t,i,j,n,m;
LL ans,a,b;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d",&n);
scanf("%lld%lld",&a,&b);
for(i=1;i<=n;i++)
{
scanf("%s",s1[i]);
for(j=0;j<11;j++)
{
s[i][j]=s1[i][j]-'0';
}
}
for(i=1;i<=n;i++)
{
if(five(i))
ans+=a;
else if(eight(i))
ans+=a;
else ans+=b;
}
printf("%lld\n",ans);
}
return 0;
}

  今天又仔细看了这道题,发现昨天少考虑一种情况,题目有三个要求1、后五位数字一样   2、后五位数字连续(可以递增也可以递减  忘记考虑递减的情况了)3、后八位可以组成一个日期,日期范围是1980年01月01号到2016年12月31号

接下来就主要处理每个月份对应时间以及闰年即可

#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include<algorithm>
#define LL long long
#define PI atan(1.0)*4
#define DD doublea
#define MAX 100100
#define mod 10007
using namespace std;
int s[MAX][15];
char s1[MAX][15];
int op[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
//int op2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int five(int x)//判断后五位
{
int i,j;
int y=s[x][6];
int flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=y)
{
flag=0;
break;
}
}
if(flag==1) return 1;
flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=s[x][i-1]+1)
{
flag=0;
break;
}
}
if(flag==1) return 1;
flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=s[x][i-1]-1)
{
flag=0;
break;
}
}
if(flag==1) return 1;
else return 0;
}
int judge(int x)//判断闰年
{
if((x%4==0&&x%100!=0)||x%400==0)
return 1;
else return 0;
}
int eight(int x) //判断后八位
{
int i,j;
int flag=1;
int sum=s[x][3];
int mouth=s[x][7]*10+s[x][8];
int day=s[x][9]*10+s[x][10]; for(i=4;i<=6;i++)
sum=sum*10+s[x][i];
// printf("%d*\n",sum);
if(mouth==2)
{
if(judge(sum))
op[2]=29;
else
op[2]=28;
}
if(sum>=1980&&sum<=2016&&mouth>=1&&mouth<=12&&day>=1&&day<=op[mouth])
return 1;
else return 0;
}
int main()
{
int t,i,j,n,m;
__int64 ans,a,b;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d",&n);
scanf("%I64d%I64d",&a,&b);
for(i=1;i<=n;i++)
{
scanf("%s",s1[i]);
for(j=0;j<11;j++)
s[i][j]=s1[i][j]-'0';
}
for(i=1;i<=n;i++)
{
if(five(i))
ans+=a;
else if(eight(i))
ans+=a;
else ans+=b;
}
printf("%I64d\n",ans);
}
return 0;
}

  

BestCoder Round #69 (div.2)(hdu5611)的更多相关文章

  1. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  2. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  3. Codeforces Round #219 (Div. 1)(完全)

    戳我看题目 A:给你n个数,要求尽可能多的找出匹配,如果两个数匹配,则ai*2 <= aj 排序,从中间切断,分成相等的两半后,对于较大的那一半,从大到小遍历,对于每个数在左边那组找到最大的满足 ...

  4. BestCoder Round #73 (div.2)(hdu 5630)

    Rikka with Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. BestCoder Round #71 (div.2) (hdu 5621)

    KK's Point Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  6. BestCoder Round #71 (div.2) (hdu 5620 菲波那切数列变形)

    KK's Steel Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  7. Codeforces Round #544 (Div. 3) (补)

    D:没有注意到a==0&&b==0的情况,把自己卡崩了.对于数学公式推导一定要注意关于0的特殊情况,不可以少 #include <iostream> #include &l ...

  8. Codeforces Round #249 (Div. 2) (模拟)

    C. Cardiogram time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. Codeforces Round #613 (Div. 2) (A-E)

    A略 直接求和最大的子序列即可(注意不能全部选中整个子序列) or #include<bits/stdc++.h> using namespace std; void solve(){ i ...

随机推荐

  1. Android真机调试的时候logcat中无法输出调试信息的解决办法

    真机调试不输出日志到logcat的原因是手机厂商默认关闭了调试打印的功能,通过以下方法开启此方法. 下面以华为P6手机为例进行操作: 1.在拨号界面输入:*#*#2846579#*#* 进入测试菜单界 ...

  2. ER模型到关系模型的转换规则

    E-R模型向关系模型的转换规则: 一.两元联系的转换规则 (1)实体类型的转换 将每个实体类型转换成一个关系模式,实体的属性即为关系的属性,实体标识符即为关系的键. (2)联系类型的转换 a实体间的联 ...

  3. powerScript脚本

    一.powerScript的语法 1.0变量的命名及使用 powerscript的标识符(变量名称)必须以字母或下划线开头,其它的字符可以是下划线(_).短横线(-).美元符号($).号码符号(#) ...

  4. “main cannot be resolved or is not a field”解决方案

    .layout.main总是在layout上有错误提示波浪线. 解决方法: (1) 删除"import android.R;". (2) 勾选上Eclipse中的"Pro ...

  5. json化表单数据

    /** * josn化表单数据 * @name baidu.form.json * @function * @grammar baidu.form.json(form[, replacer]) * @ ...

  6. TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节

    1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统 ...

  7. T-SQL查询进阶-10分钟理解游标

    转:http://www.cnblogs.com/CareySon/archive/2011/11/01/2231381.html 概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的 ...

  8. Andorid-如何为你的Android应用缩放图片

    很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件部门), ...

  9. hdu 2473 Junk-Mail Filter(并查集_虚节点)2008 Asia Regional Hangzhou

    感觉有些难的题,刚开始就想到了设立虚节点,但是实现总是出错,因为每次设立了虚节点之后,无法将原节点和虚节点分开,导致虚节点根本无意义. 以上纯属废话,可以忽略…… 题意—— 给定n个点(0, 1, 2 ...

  10. ylbtech-数据库设计与优化-对作为复选框/单选列表的集合表的设计

    ylbtech-DatabaseDesgin:ylbtech-数据库设计与优化-对作为复选框/单选列表的集合表的设计 -- DatabaseName:通用表结构-- -- 主要是针对将要设计的表对象, ...