zoukankan      html  css  js  c++  java
  • 【省选模拟】—River(贪心)

    传送门

    很显然可以发现对于某一天,一定是选择到达下一步所用时间最小的那一天
    也就是在pp的决策是选择i+aipi+a_i-p最小的一天
    而且对于一个pp决策一定是固定的
    对每一天处理一个下步走多少天的nxtnxt

    那在n1e6nle 1e6就可以简单解决了

    inline ll calc(int p=1,int k=n){
    	ll res=0;
    	for(int i=1;i<=k;i++){
    		int x=(p-1)%m+1;
    		p=p+nxt[x],res+=nxt[x];
    	}
    	return res;
    }
    

    结果处理nxtnxt的时候自己手贱把nmn,m写反了233

    n1e9nle 1e9的时候

    因为mm只有1e61e6,所以路径一定是一个ρ ho一样的
    只需要找到环然后记一下尾巴乱搞一下就可以了

    结果意识模糊各种细节出锅233

    复杂度O(n)O(n),不知道快到哪里去了

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define int long long
    const int RLEN=1<<18|1;
    inline char gc(){
    	static char ibuf[RLEN],*ib,*ob;
    	(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
    	return (ib==ob)?EOF:*ib++;
    }
    inline int read(){
    	char ch=gc();
    	int res=0,f=1;
    	while(!isdigit(ch)){if(ch=='-')f=-f;ch=gc();}
    	while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();
    	return res*f;
    }
    const int N=2000005;
    int n,m;
    ll f[N],nxt[N<<1],cir,ans;
    inline void init(){
    	nxt[m<<1]=1e18;
    	for(int i=(m<<1)-1;~i;--i)nxt[i]=min(nxt[i],nxt[i+1]+1);
    }
    int dep[N],prelen,len,tot;
    void dfs(int u){
    	int v=(nxt[u]+u)%m;
    	if(dep[v]){
    		len=dep[u]-dep[v]+1,prelen=dep[v];
    		cir=f[dep[u]]-f[dep[v]]+nxt[u];return;
    	}
    	dep[v]=++tot;
    	f[tot]=f[tot-1]+nxt[u];
    	dfs(v);
    }
    signed main(){
    	n=read(),m=read();
    	for(int i=0;i<m;i++)nxt[i]=nxt[i+m]=read();
    	init();dep[0]=++tot;
    	if(n<=tot){
    		while(n--)ans+=f[ans%m];cout<<ans;return 0;
    	}
    	dfs(0);
    	n-=prelen-1,ans+=f[prelen];
    	ans+=1ll*(n/len)*cir;
    	n%=len;
    	while(n--)ans+=nxt[ans%m];
    	cout<<ans;
    }
    
  • 相关阅读:
    java中的异常类
    Mysql--JDBC的基础
    eclipse使用断言
    idea中使用断言
    java的null
    array,集合(collection),集合(list)的区别
    命名管道FIFO
    标准库中的管道操作
    现代进程间的通信方式--管道
    广播编程之发送者
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/11145581.html
Copyright © 2011-2022 走看看