比赛链接:
https://codeforces.com/contest/1699
C. The Third Problem
题意:
给定一个排列 ,找到排列 ,要求满足,对于任意 的区间 = ,问 有多少种可能。
思路:
对于一个区间 ,如果它的 ,那说明 的数都在区间中出现过了,而 可以在区间中除了 所在的位置任意移动,都不会影响 的值,由此,可以构造出解题方法。
代码:
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int mod = 1e9 + 7, INF = 1e9;
void solve(){
LL n;
cin >> n;
vector <LL> p(n + 1);
for (int i = 0; i < n; i ++ ){
LL x;
cin >> x;
p[x] = i;
}
LL L = INF, R = -INF, ans = 1;
for (int i = 0; i < n; i ++ ){
if (L <= p[i] && p[i] <= R){
ans = ans * (R - L - i + 1) % mod;
}
L = min(L, p[i]);
R = max(R, p[i]);
}
cout << ans << "\n";
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);
LL T;
cin >> T;
while (T -- )
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)