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 p1−p0+1−2
对于 p 3 p_3 p3 如果不在这三个数组成的范围之内的话也是固定的。
否则可以范围内的任意一个
r
−
l
+
1
−
3
r-l+1-3
r−l+1−3
因此直接模拟即可。
#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 / 思维 找规律