C. The Third Problem(找规律)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. The Third Problem(找规律)相关的知识,希望对你有一定的参考价值。

C. The Third Problem(找规律)

可以发现 0 , 1 0,1 0,1的位置不能变。

然后是看 2 2 2

不妨设 p 0 < p 1 p_0<p_1 p0<p1

p 2 < p 0 p_2<p_0 p2<p0 p 2 > p 1 p_2>p_1 p2>p1 ,则 p 2 p_2 p2位置不能变。

因为 [ p 2 , p 1 ] [p_2,p_1] [p2,p1] [ p 0 , p 2 ] [p_0,p_2] [p0,p2] 会受 p 2 p_2 p2位置影响。

因此只有 p 0 < p 2 < p 1 p_0<p_2<p_1 p0<p2<p1 满足。

p 2 p_2 p2可选的情况有: p 1 − p 0 + 1 − 2 p_1-p_0+1-2 p1p0+12

对于 p 3 p_3 p3 如果不在这三个数组成的范围之内的话也是固定的。

否则可以范围内的任意一个 r − l + 1 − 3 r-l+1-3 rl+13
因此直接模拟即可。

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const ll NMAX=1e5+5,MOD=1e9+7;

ll v[NMAX],pos[NMAX];
void tc()

    ll n,l,r,ans=1;

    cin>>n;

    for(ll i=0;i<n;i++)
        cin>>v[i];
        pos[v[i]]=i;
    

    l = r = pos[0];

    for(ll i=1;i<n;i++)
        if(pos[i]<l) l = pos[i];

        else if(pos[i]>r) r = pos[i];

        else ans=ans*(r-l+1-i)%MOD;
    
    cout<<ans<<'\\n';

int main()

    ios_base::sync_with_stdio(false); cin.tie(0);
    ll t;
    cin>>t;
    while(t--)
        tc();
    return 0;

高性能云服务器 精品线路独享带宽,毫秒延迟,年中盛惠 1 折起

以上是关于C. The Third Problem(找规律)的主要内容,如果未能解决你的问题,请参考以下文章

Number Theory Problem(The 2016 ACM-ICPC Asia China-Final Contest 找规律)

C. K-th Not Divisible by n1200 / 思维 找规律

C. Yet Another Counting Problem(循环节规律)

C. Minimize The Integer(贪心)

C. Minimize The Integer(贪心)

机器学习基石笔记-chapter 1 The learning problem