铭宝宝收集了很多手机号码,没错,他想卖手机号码赚钱。 他觉得有如下性质的手机号码可以卖aa元钱,其他的号码,只能卖bb元钱。 1.末5位数字相同(比如123-4567-7777) 2.末5位是连续递增或者连续递减的,且相邻数位相差1的数(比如188-0002-3456) 3.末8位是一个表示日期的数字,并且表示的日期在1980年1月1日至2016年12月31日内(比如188-1888-0809表示1888年8月9日) 铭宝宝想知道卖掉所有的手机号码能赚多少钱。
输入T(T \leq 30)T(T≤30)表示TT组测试数据 输入n(n \leq 100,000)n(n≤100,000)表示铭宝宝有nn张手机号码(没有相同的手机号码) 输入22个正整数a, ba,b, 表示两种类型的手机号码分别能卖aa元和bb元(b \leq 1000, a \leq 100,000)(b≤1000,a≤100,000) 接下去nn行,每行输入11个手机号码(|phonenumber|==11,首位非0)
输出答案
1 5 100000 1000 12319990212 11111111111 22222223456 10022221111 32165491212
302000
读懂题去比较就行了,不是很难的。
代码如下:
#include <stdio.h> #include <string.h> int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool run(int y) { if ((y%400==0) || (y%4==0 && y%100!=0)) return true; return false; } char a[11]; // 1234 56 789 10 11 bool check1() // 0123 45 678 9 10 { for (int i=9;i>=6;i--) { if (a[i]!=a[10]) return false; } return true; } bool check2() { int dot=0; for (int i=10;i>=7;i--) { if (a[i]==a[i-1]+1) dot++; } if (dot==4) return true; for (int i=10;i>=7;i--) { if (a[i]!=a[i-1]-1) return false; } return true; } bool check3() { int y,m,d; y=(a[3]-'0')*1000+(a[4]-'0')*100+(a[5]-'0')*10+a[6]-'0'; m=(a[7]-'0')*10+a[8]-'0'; d=(a[9]-'0')*10+a[10]-'0'; if (m==2 && run(y)) d--; if (y>=1980 && y<=2016 && m>=1 && m<=12 && d<=day[m]) return true; return false; } int main() { int u; int n; int m1,m2; int ans; scanf ("%d",&u); while (u--) { scanf ("%d",&n); scanf ("%d %d",&m1,&m2); ans=0; for (int i=1;i<=n;i++) { scanf ("%s",a); if (check1() || check2() || check3()) ans+=m1; else ans+=m2; } printf ("%d\n",ans); } return 0; }