CodeForces - 931B World Cup (思维 模拟)

题目大意:

     圆形球场有n个门,Allen想要进去看比赛。Allen采取以下方案进入球场:开始Allen站在第一个门,如果当前门前面有人Allen会花费单位时间走到下一个门,如果没人Allen从这个门就进去了。球场的每个门,每单位时间可以进去一个人。问Allen最终是从哪个门进入球场的?

题解:

     如果是直接模拟的话,极限是数据是1e5个点,且值都是1e9,这样就算模拟是O(n)的也会T掉,所以直接模拟不可以。

    经过第i个门的时间是i,i+n,i+2n......i+kn,当第一次i+kn>a[i]时,这个i+kn就是如果Allen要从第i个门进入需要多少时间,对于每个门,计算出这个i+kn,然后取所有门的最小值就是答案

#include<bits/stdc++.h>
#include<cstring>
#define ll unsigned long long
using namespace std;
int a[100010];
ll b[100010];
#define INF 1000000000000000000
int main()
{
    int n;
    scanf("%d",&n);
    int t;
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&a[i]);
        t=a[i]/n;
        b[i]=((i+t*n>a[i])?(i+t*n):(i+(t+1)*n));
    }
    ll ans=INF;
    int pos=0;
    for(int i=1;i<=n;++i)
        if(ans>b[i])
        {
            ans=b[i];
            pos=i;
        }
    cout<<pos<<endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值