本文共 783 字,大约阅读时间需要 2 分钟。
题目大意:
圆形球场有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#include #define ll unsigned long longusing namespace std;int a[100010];ll b[100010];#define INF 1000000000000000000int 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< <
转载地址:http://lufgf.baihongyu.com/