列表

详情


NC25188. 小蚂蚁过马路

描述

共 有 n(1<=n<=1e15) 只 小 蚂 蚁 准 备 从 城 市 1 穿 梭 到 城 市 K(1<=K<=1e5) ,路线是从城市 1 出发,到城市 2,再到城市 3.....最后到城市 K,一只蚂蚁花费 1 个单位时间从城市 i 到城市 i+1,但同一时间从城市 i 到城市 i+1 最多允许通过 a[i]只小蚂蚁,请问 n 只蚂蚁全到城市 K 所需要的时间。 

输入描述

第一行一个整数T(T <=
6),表示数据组数。

在每组输入数据中,第一行有2个正整数,n(n <= 1e15),K(2<=K<=1e5),分别表示小蚂蚁的数量和城市的数量。

第二行中有K - 1个正整数a[i](a[i] <= 1e15),表示从城市i到城市i+1同一时间最多能通过几只小蚂蚁。

输出描述

对于每组数据,输出一个数ans,表示所有蚂蚁到达城市K所需要的时间。

示例1

输入:

2 
16 3 
6 5 
15 3 
6 5 

输出:

5
4

说明:

第二组样例,第一个单位时间有6只蚂蚁从城市1到城市2,第二个单位时间有5只城市2的蚂蚁到城市3,同时又有6只蚂蚁从城市1到城市2,此时,有3只蚂蚁在城市1,7只蚂蚁在城市2,5只蚂蚁在城市3,第3个单位时间里,

3 只城市1的蚂蚁到达城市2,5只城市2的蚂蚁到达城市3,此时,有0只蚂蚁在城市1,5只蚂蚁在城市2,10只蚂蚁在城市3,第四个单位时间所有蚂蚁都可以到达城市3。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 114ms, 内存消耗: 352K, 提交时间: 2019-04-21 21:08:51

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
	ll t;
	cin>>t;
	while(t--){
		ll n,k;
		cin>>n>>k;
		ll m,p;
		cin>>m;
		for(ll i=1;i<k-1;i++){
			cin>>p;
			if(p<m)m=p;
		}
		ll ans;
		if(n%m)ans=n/m+1;
		else ans=n/m;
		cout<<ans-1+k-1<<endl;
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 57ms, 内存消耗: 468K, 提交时间: 2020-02-26 13:28:23

#include<bits/stdc++.h>
using namespace std;
long long t,n,m,minn,x;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>m>>n;
		minn=1e16;
		for(int i=1;i<n;i++)
		{
			scanf("%lld",&x);
			minn=min(minn,x);
		}
		printf("%lld\n",(n-1)+(m-1)/minn);
	}
}

Python3(3.5.2) 解法, 执行用时: 167ms, 内存消耗: 18332K, 提交时间: 2019-04-21 12:44:43

T=int(input())
for t in range(T):
    n,m=map(int,input().split())
    A=list(map(int,input().split()))
    print(m-1+(n-1)//min(A))

上一题