首页 > 其他分享 >ABC 241E - Putting Candies(循环节:链+环)

ABC 241E - Putting Candies(循环节:链+环)

时间:2022-09-22 18:34:18浏览次数:94  
标签:ABC 241E Candies LL cin Sample Putting

https://zhuanlan.zhihu.com/p/473078132
这位大佬的E解释的非常清楚,强推

E - Putting Candies
https://atcoder.jp/contests/abc241/tasks/abc241_e

题目大意:
给定一个长度为n数组a: a[0] a[1] a[2] a[3]......a[n-1]。

初始有一个数 X=0,每次我们执行X+=a[X%n],问在执行 K次操作后,X的值。
Sample Input 1  
5 3
2 1 6 3 1
Sample Output 1  
11

Sample Input 2  
10 1000000000000
260522 914575 436426 979445 648772 690081 933447 190629 703497 47202
Sample Output 2  
826617499998784056

模拟一下第一个图可知:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL N=200200,M=2002;
LL a[N],id[N],pre[N],n,k,st,ed;
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        cin>>n>>k;
        for(LL i=0;i<n;i++)
            cin>>a[i];
        //初始化大家都是独立的个体
        for(LL i=0;i<N;i++)
            id[i]=-1;
        id[0]=0;//第一个位置上不论余什么都还是0
        //找循环节
        for(LL i=0;i<n;i++)
        {
            pre[i+1]=pre[i]+a[pre[i]%n];
            if(id[pre[i+1]%n]!=-1)
            {
                st=id[pre[i+1]%n];
                ed=i+1;
                break;
            }
            id[pre[i+1]%n]=i+1;
        }
        LL ans=0;
        if(k<=st) ans=pre[k];
        else
        {
            LL len=ed-st;
            LL X=pre[ed]-pre[st];
            LL A=(k-st-1)/len;
            LL B=(k-st-1)%len;
            ans=pre[st+B+1]+A*X;
        }
        cout<<ans<<endl;
    }
    return 0;
}

标签:ABC,241E,Candies,LL,cin,Sample,Putting
From: https://www.cnblogs.com/Vivian-0918/p/16720443.html

相关文章

  • ABC 241D - Sequence Query(multiset)
    newknowledge(stl)multiset位于库中,可以看成一个序列,插入一个数,删除一个数都可以在O(logn)的时间内完成,能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。h......
  • abc269
    \(\textbf{G.}\)设\(c_i=b_i-a_i\),\(S_a=\sum_{i=1}^{n}a_i\).则此时\(k\)的答案为选择最少个数的\(c\)凑出\(k-S_a\)的答案.注意......
  • Codeforces Round #821 (Div. 2) ABCD1
    A.ConsecutiveSumhttps://codeforces.com/contest/1733/problem/A题目大意:给定一个长度为n的数组a。最多可以执行k次以下操作:选择两个指数i和j,其中imodk=jmodk......
  • centos7安装nginx详细步骤 useradd abc 新建用户 在 homg下出现abc文件夹
    centos7安装nginx详细步骤一、下载nginx安装包和所需依赖groupadd-g1002nginx#创建nginx用户useradd-g1002-u1002......
  • ABC 269 E - Last Rook(交互题)
    https://atcoder.jp/contests/abc269/tasks/abc269_e有一个N*N的棋盘和N辆车。现在,n-1辆车被放在棋盘上,你必须放置1辆车,满足以下所有条件。没有一行包含两个或更多的车......
  • ABC 269 C - Submask(dfs+位运算)
    C-Submask(dfs+位运算)题目大意:给定一个十进制的数字,让我们求出它的二进制下的1可以改变时候的数字SampleInput111SampleOutput10123891011Thebi......
  • ABC 268 D(无耻)
    $-1$天……题面Takahashi有$N$个组成他的全名的单词(比如真实世界中,$N=2$,字符串是“Naohiro”和“Takahashi”)。这些单词分别是$S_1,S_2,S_3,\cdots,......
  • ABC269
    DContent给你若干个点和相邻点的定义,问你图中有几个连通块。Sol连通用并查集维护,就是这里的相邻有点怪。Code#includeusingnamespacestd;constint_=1005;int......
  • *ABC 236 D - Dance(dfs)
    https://atcoder.jp/contests/abc236/tasks/abc236_d题意:两个两个组队,开心值异或,求最大开心值。注意这句话:IfPersoniandPersonjpairup,whereiissmallertha......
  • ABC267 - C,D Solutions
    目录ABC267-C,DSolutionsC-Index×A(Continuousver.)ProblemStatementSolutionImplementationD-Index×A(NotContinuousver.)ProblemStatementSolutionImp......