P1424 小鱼的航程(改进版)
题目描述
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x 开始算起,过了 n 天以后,小鱼一共累计游泳了多少公里呢?
输入格式
输入两个正整数 x,n,表示从周 x 算起,经过 n 天。
输出格式
输出一个整数,表示小鱼累计游泳了多少公里。
输入输出样例
输入 #1复制运行
3 10
输出 #1复制运行
2000
说明/提示
数据保证,1≤x≤7,1≤n≤106。
解题思路:
首先这里给了当天是星期几和游几天,那么可以把游几天的时间分为3个时间段分别为1.当天到这个星期天,2.剩余时间还有的整数个星期,3.最后的剩余时间不足一个星期。
例如3 ,10 那么 第一部分为3~7,5天 ;第二部分为 (10-5)/7=0 ,则为0个星期;第三个部分为(10-5)-0*7=5天
下面是代码价段
总体代码 :
#include<bits/stdc++.h>
using namespace std;
int main(){long long a,b,c,d,sum=0;cin>>a>>b;c=8-a;b-=c;d=b/7;b=b%7;if(a<=5){sum+=(6-a)*250;}if(b<=5){sum+=b*250;}else{sum+=5*250;}sum+=d*5*250;cout<<sum;return 0;
}
优点:时间复杂度低
相比较直接一次循环,时间复杂度为o(n)这个算法时间复杂度大大变低。
比较代码:(这个时间复杂度更大的多,一但n过大,可能会超时)
#include<bits/stdc++.h>
using namespace std;int main(){long long x,n,g=0;cin>>x>>n;for(int i=1;i<=n;i++){if(x!=6&&x!=7){g+=250;}x++;if(x>7) x=1;}cout<<g;return 0;
}