B3856 [语言月赛 202309] 椰奶国

题目背景

扶苏的梦想是在椰奶国生活。这个国度的成员都是可爱的椰奶,椰奶们无需在意外面的世界,快乐地生活在椰奶国里。

题目描述

椰奶国的一天共有 n 个小时。第 i 个小时(0≤i<n)共有 i+1 分钟,第 i 个小时的第 j 分钟(0≤j≤i)共有 10j+1 秒。

注意,这里小时、分钟、秒数都是从 00 起计数。

现在,给出起始时刻 t1​=A:B:C,表示 t1​ 时刻是 A 时 B 分 C 秒,和结束时刻 t2​=E:F:G,表示 t2​ 时刻是 E 时 F 分 G 秒。

已知时刻 t2​ 的时刻不早于 t1​ 的时刻,且二者时间间隔小于一天。

请你求出t1​ 和 t2​ 之间经过了多少秒。

输入格式

本题单个测试点内有多组测试数据。第一行是一个整数,表示数据组数 T。

接下来 T 行,每行七个整数,依次表示一组数据的 n,A,B,C,E,F,G。

输出格式

对每组数据,输出一行一个整数表示答案。

输入输出样例

输入 #1复制

1
10 3 2 11 3 3 0

输出 #1复制

10

输入 #2复制

1
2 1 1 3 0 0 0

输出 #2复制

8

ε=(´ο`*)))唉!扶苏你舍密斯?和我抢王小美?椰奶有那么好喝吗?(是挺好喝的,爱喝)

在暴力的基础上更进一步,发现每个小时都有:

∑j=0i​(j×10+1)

秒。

再使用高斯求和公式:

(n+1)×2n​

就可以变为:

(i+1)×2i​×(i×10+1)

时间复杂度足以通过题目,但是呢有可能不是在同一天,怎么办呢?只要用差值取模一天的秒数即可。但是在数据量大时会有偏差,所以还要加上一天的秒数。

#include <bits/stdc++.h>
using namespace std;
int main(){
	long long t;
	cin>>t;
	while(t--){
		long long n,a,b,c,d,e,f,ans1=0,ans2=0,day=0;
		cin>>n>>a>>b>>c>>d>>e>>f;
		for(long long i=0;i<n;i++){
			day+=i+1+i*(i+1)/2*10;
		}
		for(long long i=0;i<a;i++){
			ans1+=i+1+i*(i+1)/2*10;
		}
		ans1+=b+b*(b-1)/2*10;
		ans1+=c;
		for(long long i=0;i<d;i++){
			ans2+=i+1+i*(i+1)/2*10;
		}
		ans2+=e+e*(e-1)/2*10;
		ans2+=f;
		cout<<(ans2-ans1+day)%day<<endl;
	}
	return 0;
}

就AC了! 

扶苏姐姐给我留点椰奶!

  • 45
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值