Baby Ming and phone number
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 261 Accepted Submission(s): 82
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.
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
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
Source
解体思路:被人家hack掉了,好不爽,竟然会暴int,醉了。
unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
代码如下:
#include<stdio.h>
#include<string>
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(char a[15]){
int i,flag,x,y,z;
flag=0;
if(a[6]==a[7]&&a[7]==a[8]&&a[8]==a[9]&&a[9]==a[10])return true;
if(a[7]>a[6]){
for(i=6;i<10;i++){
if(a[i+1]-a[i]!=1){
flag=1;
break;
}
}
}
else if(a[7]<a[6]){
for(i=6;i<10;i++){
if(a[i+1]-a[i]!=-1){
flag=1;
break;
}
}
}
if(!flag&&a[7]!=a[6])return true;
x=(a[3]-'0')*1000+(a[4]-'0')*100+(a[5]-'0')*10+(a[6]-'0');
y=(a[7]-'0')*10+a[8]-'0';
z=(a[9]-'0')*10+a[10]-'0';
if(x>=1980&&x<=2016){
if((x-1980)%4==0)
day[2]=29;
if(y>=1&&y<=12){
if(z>0&&z<=day[y]){
day[2]=28;
return true;
}
}
}
day[2]=28;
return false;
}
int main(){
int t,n;
long long sum,a,b;
char s[15];
scanf("%d",&t);
while(t--){
sum=0;
scanf("%d",&n);
scanf("%lld%lld",&a,&b);
for(int i=1;i<=n;i++){
scanf("%s",s);
if(check(s)){
sum+=a;
}
else sum+=b;
}
printf("%lld\n",sum);
}
return 0;
}