【Mc生存】经验值
题目背景
初一福利第2弹。。。
题目描述
话说 clearman 在 MC 世界开了个祥艺奶牛场,用熔浆、TNT 等丧心病狂的折磨牛,获取牛肉、牛奶等刷经验。他想知道他到底达到什么层次。
他总共进行了
n
n
n 项操作,每次操作要付出
x
x
x 生命值(初始生命是
10
10
10 点,初一党都知道!并且要先计算付出的生命值,如果小于等于
0
0
0,则死亡,本次及以下操作都无效。但切记:付出生命值可以是负数,也就是说可以回复
−
x
−x
−x 点生命值,但上限只能是
10
10
10!切记!),每次操作可以获得
a
a
a 经验值(不能为负),他最后能达到
m
m
m 级
t
t
t 经验。
P.S. 关于等级
初始等级为 0 0 0。每加 2 m 2^m 2m( m m m 为当前等级)点经验可升一级。
1、假设 clearman 一共得到
15
15
15 点经验,那么他应该为
4
4
4 级(
15
−
1
−
2
−
4
−
8
=
0
15-1-2-4-8=0
15−1−2−4−8=0)加
0
0
0 点经验。
2、假设 clearman 一共获得
39
39
39 点经验,那么他应该为
5
5
5 级(
39
−
1
−
2
−
4
−
8
−
16
=
8
39-1-2-4-8-16=8
39−1−2−4−8−16=8)加
8
8
8 点经验。
输入格式
第一行一个正整数
n
n
n,表示操作个数。
接下来
n
n
n 行,每行两个数,为 clearman 的一次操作。
输出格式
一行,为等级和经验值。
样例 #1
样例输入 #1
2
5.5 15
4.5 24
样例输出 #1
4 0
提示说明
数据很弱,人肉输的,但是很坑。。。
【数据范围】
对于
100
%
100\%
100% 的数据,
1
≤
n
≤
20
1\le n \le 20
1≤n≤20。
代码内容
#include <stdio.h>
int main()
{
int t,k;
double m,life=10;
int n,arr=0,index=0;
scanf("%d",&t);
for(k=0;k<t;k++)
{
scanf("%lf%d",&m,&n);
life-=m;
if(life>10) life=10;
if(life<=0) index=1;
if(life>0&&n>=0&&index!=1) arr+=n;
}
int i,cu=1,a=1;
for(i=0;cu<=arr;i++)
{
a*=2;
cu+=a;
}
printf("%d %d",i,arr-cu+a);
return 0;
}