题目描述
Ivy所在的公司想推出一款手机APP“步步夺金”,该APP可以统计用户每天走路的步数,并给予相应的“金币”奖励。在用户的“金币”达到一定数量后,就可以在公司的网站上兑换一定的体育用品。
根据走路步数x奖励金币的规则如下:
1、每天的前1000步可领取0.3金币(若未达到1000步则领取数量为零),之后的每2000步能领取0.1金币。为了引导用户适量运动,每天领取的金币数量不能超过3。
2、用户只有在APP中点击“签到”才能领取当天步数对应的金币。
3、为了让用户能够每天坚持使用该APP,在用户连续三天签到后,从第四天开始,用户每天“签到”时领取的金币数可以在原金币计算方法的基础上乘以2(当然前提是在第四天时用户也点击“签到”,并且领的金币最多不能超过6)。但之后只要有一天中断点击“签到”,则又要重新连续签到三天,在第四天时才能继续获得金币加倍的优惠。
Ivy的任务是,根据用户每天所走步数以及签到的情况,统计用户n天后所拥有的金币总数。请帮助Ivy设计这个程序。
输入
输入共有n+1行,第一行包含一个正整数n,表示需要统计该用户n天后的金币总数。接下来有n(1<=n<=100)行,每行两个正整数,xi(1<=xi<=100000)和fi(1或0),分别表示第i天时用户所走的步数以及当天该用户是否进行了签到。fi为0表示用户当天未点击“签到”,为1表示用户当天点击“签到”。
输出
输出数据仅一行,表示n天后该用户所拥有的金币总数,保留一位小数。
样例输入 Copy
6
600 1
2300 1
5000 1
56000 1
80000 0
57000 1
样例输出 Copy
9.8
提示
第一天:用户走了600步,小于1000步,签到后得到0金币。
第二天:用户走了2300步,前1000步可得金币0.3;2300-1000=1300,不足2000步。所以签到后可得0.3金币。
第三天:用户走了5000步,在进行签到后,可得到的金币为:0.3+0.12=0.5。
第四天:用户走了56000步,在进行签到后,应得的金币为: 0.3+0.127=3。由于是连续第四天签到,所以实际得到32=6金币。
第五天:用户走了80000步,但未进行签到,所以得到的金币为0。
第六天:用户走了57000步,进行签到后,应得的金币为::0.3+0.128=3.1。由于每天最高获金不能超过3,所以实际得到3金币。
根据上述每天获得的金币,该用户6天后可获“金币”总数为9.8。
#include<bits/stdc++.h>
using namespace std;
int cmp(const void*a,const void *b)
{
return*(int *)a-*(int *)b;
}
typedef struct news
{
int z,x;
float c=0;
}news;
/*bool cmp2(news a,news b)
{if(a.z==b.z)
return a.x<b.x;
}*/
int main()
{
int z=0,x=0,i=0,v=0,j=1,c=0,k=0,y,f=0,q=0,len,min1,min2,max1,len1,max2,len2;
float z1=0,z2=0,z3=0,z4=0;
double c1=0,c2,c3;
char p1[100]={0},p2[100],i1;
long long x1=0;
//int *a=(int *)malloc(100000005*sizeof(int ))
string str1,str2,str3;
int s[300][300];
int a[300][300];
memset(s,0,sizeof(s));
int n,m;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
s[i][j]+=a[i][j];
s[i][j]+=s[i-1][j];
s[i][j]+=s[i][j-1];
s[i][j]-=s[i-1][j-1];
}
}
int maxx=-1e8;
for(i=1;i<=n;i++)
{
for(j=0;j<i;j++)
{
int rec=0;
for(int w=1;w<=m;w++)
{
if(s[i][w]-s[j][w]-s[i][rec]+s[j][rec]>0)
{
if(s[i][w]-s[j][w]-s[i][rec]+s[j][rec]>maxx)
{
maxx=s[i][w]-s[j][w]-s[i][rec]+s[j][rec];
}
}
else
{
if(s[i][w]-s[j][w]-s[i][rec]+s[j][rec]>maxx)
{
maxx=s[i][w]-s[j][w]-s[i][rec]+s[j][rec];
}
rec=w;
}
}
}
}
printf("%d\n",maxx);
}
//qsort(a,z,sizeof(int),cmp);
虽然是借鉴了别人的,但我不久会能看懂的!