Baby Ming and Weight lifting
Accepts: 335
Submissions: 1474
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
铭宝宝喜欢举重运动,他有一个杠铃杆(重量忽略),和2种类型的杠铃片(重量分别为a和b),每种杠铃片都有无限个。 铭宝宝打算用这2种杠铃片组成重量为C的杠铃(杠铃必须平衡),他想让你告诉他,应该如何组合。
输入描述
输入一个正整数T(1≤T≤1000)表示测试组数 每组测试数据输入3个正整数a,b,C(0<a,b,C≤1000), 表示2种杠铃片的重量,以及杠铃的重量。
输出描述
如果不能够组成重量为C的杠铃,输出Impossible。 否则输出2个数,表示需要a杠铃片的数量,和b杠铃片的数量。(如果有多种答案,输出a+b最小的方案)
输入样例
2 1 2 6 1 4 5
输出样例
2 2Impossible
解:要是c%2!=0的话就不可能。其他的话就c/2枚举就行了
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { int n; scanf("%d",&n); while(n--) { int a,b,c; int A=1e8,B=1e8; int MAX=1e8+10; int ok=0; scanf("%d%d%d",&a,&b,&c); if(c%2!=0) { printf("Impossible\n"); } else { c/=2; for(int i=0;i<=c;i+=a) { for(int j=0;j<=c;j+=b) { if(i+j==c&&MAX>(i/a+j/b)) { MAX=i/a+j/b; A=i/a*2; B=j/b*2; } } } if(MAX==1e8+10) printf("Impossible\n"); else printf("%d %d\n",A,B); } } return 0; }
Baby Ming and phone number
Accepts: 111Submissions: 878Time Limit: 3000/1500 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)解:根据题意做就行了问题描述铭宝宝收集了很多手机号码,没错,他想卖手机号码赚钱。 他觉得有如下性质的手机号码可以卖a元钱,其他的号码,只能卖b元钱。 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≤30)表示T组测试数据 输入n(n≤100,000)表示铭宝宝有n张手机号码(没有相同的手机号码) 输入2个正整数a,b, 表示两种类型的手机号码分别能卖a元和b元(b≤1000,a≤100,000) 接下去n行,每行输入1个手机号码(|phonenumber|==11,首位非0)输出描述输出答案输入样例1 5 100000 1000 12319990212 11111111111 22222223456 10022221111 32165491212输出样例302000#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define LL long long const int MAXN = 11000; int ok(int year,int month,int day) { if(year<1980 || year>2016 || month > 12 || month <= 0 || day >= 32 || day <= 0) return 0; int flag = 0; if(year%400==0 || (year%4==0 && year%100 != 0)){ flag = 1; } if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){ if(day<=31 && day>=1) return 1; else { return 0; } } else { if(month == 2){ if(flag && day<=29 && day>=1) return 1; else if(!flag && day<=28 && day>=1){ return 1; } else return 0; } else { if(day<=30 && day>=1) return 1; else return 0; } } } int main() { int i,j,t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); int a,b; char s[12]; scanf("%d%d",&a,&b); LL ans = 0; for(i=1; i<=n; i++){ scanf("%s",s); if(s[6]==s[7] && s[7]==s[8] && s[8]==s[9] && s[9]==s[10]){ ans += (LL)a; } else if(abs(s[7]-s[6])==1 && s[7]-s[6] == s[8]-s[7] && s[8]-s[7]==s[9]-s[8] && s[9]-s[8]==s[10]-s[9]){ ans += (LL)a; } else { int year = (s[3]-'0')*1000 + (s[4]-'0')*100 + (s[5]-'0')*10 + (s[6]-'0'); int month = (s[7]-'0')*10 + (s[8]-'0'); int day = (s[9]-'0')*10 + (s[10]-'0'); if(ok(year,month,day)){ ans += (LL)a; } else { ans += (LL)b; } } } printf("%I64d\n",ans); } return 0; }