南邮 OJ 1970 牧师

来源:互联网 发布:mac用什么编程软件 编辑:程序博客网 时间:2024/06/10 00:13

牧师

时间限制(普通/Java) : 1000 MS/ 2000 MS          运行内存限制 : 65536 KByte
总提交 : 504            测试通过 : 33 

比赛描述

牧师作为炉石传说中典型的后期职业,有许多神奇的法术牌,比如心灵之火:使一个随从的攻击力等于其生命值;神圣之灵:使一个随从的生命值翻倍。每施放一次心灵之火需要花费1点法力值,施放神圣之灵则需要2点。现在你的场上有一个随从,你最多可以让它拥有多少攻击力呢?




输入

第一行为一个正整数T,表示有T组数据。

每组数据第一行有3个整数:n,a,b分别表示拥有的法力值以及有多少张心灵之火和神圣之灵0<=n<=1000,0<=a<=1000,0<=b<=1000。

第二行为两个整数x,y表示随从的攻击力和生命值0<=x<=1000,0<y<=1000.


输出

一个整数表示最大可能的攻击力值。


样例输入

2
2 1 1
3 2
3 1 1
3 2

样例输出

3
4

题目来源

LYD





/* Wrong Answer at Test 1#include<iostream>int main(){__int64 t,n,a,b,x,y;scanf("%I64d",&t);while(t--){scanf("%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&x,&y);while(b && n>=3){b--;n -= 2;y <<= 1;}if(n>=1 && a && x<y){x = y;}printf("%I64d\n",x);}}*//*#include<iostream>#define MAX_N 1005char a[MAX_N],b[MAX_N];int lenA,lenB;// 返回十进制数的位数int numToArray(char *a, int n){int i=0;while(n){a[i] = n%10;n /= 10;i++;}return i;}void mul(char *a, int n, int &len){int i;for(i=0;i<len;i++){a[i] *= n;a[i+1] += a[i]/10;a[i] %= 10;}while(a[len]){a[len+1] += a[len]/10;a[len] %= 10;len++;}}bool smallerThan(char *a, int lenA, char *b, int lenB){if(lenA != lenB){return lenA<lenB;}for(int i=lenA-1;i>=0;i--){if(a[i] != b[i]){return a[i]<b[i];}}return 0;}void printNum(char *a, int len){len--;while(len>=0){putchar(a[len]+'0');len--;}}int main(){//freopen("test.txt","r",stdin);int t,n,aa,bb,x,y;scanf("%d",&t);while(t--){scanf("%d%d%d%d%d",&n,&aa,&bb,&x,&y);lenA = numToArray(a,x);lenB = numToArray(b,y);while(bb && n>=3){bb--;n -= 2;mul(b,2,lenB);}if(n && a && smallerThan(a,lenA,b,lenB)){printNum(b,lenB);putchar('\n');}else{printNum(a,lenA);putchar('\n');}}}*/#include<iostream>#define MAX_N 1005char a[MAX_N],b[MAX_N];int lenA,lenB;// 返回十进制数的位数int numToArray(char *a, int n){int i=0;while(n){a[i] = n%10;n /= 10;i++;}return i;}void mul(char *a, int n, int &len){int i;for(i=0;i<len;i++){a[i] *= n;}for(i=0;i<len;i++){a[i+1] += a[i]/10;a[i] %= 10;}while(a[len]){a[len+1] = a[len]/10;a[len] %= 10;len++;}}bool smallerThan(char *a, int lenA, char *b, int lenB){if(lenA != lenB){return lenA<lenB;}for(int i=lenA-1;i>=0;i--){if(a[i] != b[i]){return a[i]<b[i];}}return 0;}void printNum(char *a, int len){len--;while(len>=0){putchar(a[len]+'0');len--;}}int main(){//freopen("test.txt","r",stdin);int t,n,aa,bb,x,y;scanf("%d",&t);while(t--){scanf("%d%d%d%d%d",&n,&aa,&bb,&x,&y);memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));lenA = numToArray(a,x);lenB = numToArray(b,y);while(bb && n>=3){bb--;n -= 2;mul(b,2,lenB);}if(n && aa && smallerThan(a,lenA,b,lenB)){// aa错写成a一直WA,所以名字最好不要取得这么类似……printNum(b,lenB);putchar('\n');}else{printNum(a,lenA);putchar('\n');}}}


0 0
原创粉丝点击