BestCoder Round #69 (div.2) 总结

来源:互联网 发布:买海关数据 编辑:程序博客网 时间:2024/05/27 09:47

Baby Ming and Weight lifting

 
 Accepts: 335
 
 Submissions: 1474
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
铭宝宝喜欢举重运动,他有一个杠铃杆(重量忽略),和22种类型的杠铃片(重量分别为aabb),每种杠铃片都有无限个。铭宝宝打算用这22种杠铃片组成重量为CC的杠铃(杠铃必须平衡),他想让你告诉他,应该如何组合。
输入描述
输入一个正整数T(1 \leq T \leq 1000)T(1T1000)表示测试组数每组测试数据输入33个正整数a, b, C(0 < a,b,C \leq 1000)a,b,C(0<a,b,C1000), 表示22种杠铃片的重量,以及杠铃的重量。
输出描述
如果不能够组成重量为CC的杠铃,输出Impossible。否则输出22个数,表示需要aa杠铃片的数量,和bb杠铃片的数量。(如果有多种答案,输出a+ba+b最小的方案)
输入样例
21 2 61 4 5
输出样例
2 2

Impossible

解:要是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: 111
 
 Submissions: 878
 Time Limit: 3000/1500 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
铭宝宝收集了很多手机号码,没错,他想卖手机号码赚钱。他觉得有如下性质的手机号码可以卖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(T30)表示TT组测试数据输入n(n \leq 100,000)n(n100,000)表示铭宝宝有nn张手机号码(没有相同的手机号码)输入22个正整数a, ba,b, 表示两种类型的手机号码分别能卖aa元和bb(b \leq 1000, a \leq 100,000)(b1000,a100,000)接下去nn行,每行输入11个手机号码(|phonenumber|==11,首位非0)
输出描述
输出答案
输入样例
15100000 10001231999021211111111111222222234561002222111132165491212
输出样例
302000
解:根据题意做就行了
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define LL long longconst 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;}

1 0
原创粉丝点击