The 2019 China Collegiate Programming Contest Harbin Site I - Interesting Permutation 思维

//#include<bits/stdc++.h>
#include<map>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
#define rep_1(i,m,n) for(int i=m;i<=n;i++)
#define mem(st) memset(st,0,sizeof st)
int read()
{
	int res=0,ch,flag=0;
	if((ch=getchar())==‘-‘)             //判断正负
		flag=1;
	else if(ch>=‘0‘&&ch<=‘9‘)           //得到完整的数
		res=ch-‘0‘;
	while((ch=getchar())>=‘0‘&&ch<=‘9‘)
		res=res*10+ch-‘0‘;
	return flag?-res:res;
}
int jqx1=9143;
void qwjt()
{
	if(jqx1=9143)
	{
		int jqx1=9143;
		int sy1h=51312;
		int z1zt=519383;
		int aistqwr=59124;
		int qwkjrqwiht=5124;
	}
}
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
typedef pair<double,double> pdd;
const int inf = 0x3f3f3f3f;
const int N=1e6+10;
ll h[N];
const int mod=1e9+7;
void solve()
{
	int n=read();
	rep_1(i,1,n)
		h[i]=read();
	ll ans=1;
	ll flag=1;
	//先确定第一位和最后一位是满足合法序列的
	//第一位肯定为0,因为一样
	//最后一位肯定为n-1
	if(h[1]!=0 || h[n]!=n-1)
		flag=0;
	rep_1(i,2,n)
	{
		if(flag==0)
			break;
		//差值肯定非递减的
		//因为最小值是不断变小的
		//最大值是不断变大的
		//所以一定是非递减的
		if(h[i]<h[i-1])
			flag=0;
		//当前的a[i]在最大值和最小值之间
		//区间长度  也就是 最大减去最小值+1  也就是 h[i]+1
		//然后要减去重复的 也就是
		//已有的数列中,在最大值到最小值之间的
		//那么就是 i-1个 必定是在最大值到最小值之间的
		//h[i]+1 -(i-1)
		//h[i]-i+2
		else if(h[i]==h[i-1])
			ans=ans*(h[i]+2-i)%mod;
		//要么比最大值小,那么比最大值大
		//只有两种方案
		else if(h[i]>h[i-1])
			ans=ans*2%mod;
	}
	if(flag==0)
		cout<<"0"<<endl;
	else
		cout<<ans<<endl;
}
signed main()
{
	int t=read();
	while(t--)
		solve();
	return 0;
}

原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12686561.html

时间: 2024-08-01 11:16:38

The 2019 China Collegiate Programming Contest Harbin Site I - Interesting Permutation 思维的相关文章

The 2019 China Collegiate Programming Contest Harbin Site I. Interesting Permutation

链接: https://codeforces.com/gym/102394/problem/I 题意: DreamGrid has an interesting permutation of 1,2,-,n denoted by a1,a2,-,an. He generates three sequences f, g and h, all of length n, according to the permutation a in the way described below: For ea

The 2019 China Collegiate Programming Contest Harbin Site

目录 Contest Info Solutions A. Artful Paintings E. Exchanging Gifts F. Fixing Banners I. Interesting Permutation J. Justifying the Conjecture K. Keeping Rabbits L. LRU Algorithm Contest Info Practice Link Solved A B C D E F G H I J K L 6/12 O - - - O O

The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

链接: https://codeforces.com/gym/102394/problem/F 题意: Harbin, whose name was originally a Manchu word meaning "a place for drying fishing nets", grew from a small rural settlement on the Songhua River to become one of the largest cities in Northea

The 2019 China Collegiate Programming Contest Harbin Site K. Keeping Rabbits

链接: https://codeforces.com/gym/102394/problem/K 题意: DreamGrid is the keeper of n rabbits. Initially, the i-th (1≤i≤n) rabbit has a weight of wi. Every morning, DreamGrid gives the rabbits a carrot of weight 1 and the rabbits fight for the only carrot

The 2019 China Collegiate Programming Contest Harbin Site J. Justifying the Conjecture

链接: https://codeforces.com/gym/102394/problem/J 题意: The great mathematician DreamGrid proposes a conjecture, which states that: Every positive integer can be expressed as the sum of a prime number and a composite number. DreamGrid can't justify his c

The 2019 China Collegiate Programming Contest Harbin Site A - Artful Paintings 差分约束

#include<map> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define ll long long const int N=1e5+5; const int M=1e5+5; const int INF=0x3f3f3f3f; int read(

The 2019 China Collegiate Programming Contest Harbin Site E - Exchanging Gifts 拓扑图+离散化

非常难受的是,我用链表写的,要么wa,要么tle,甚至还出现了超内存... 然后换成矩阵,开始还是wa了两次,然后换了别的快读,才过,难受. #include<map> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; #

2019 China Collegiate Programming Contest Qinhuangdao Onsite

目录 Contest Info Solutions A. Angle Beats D. Decimal F. Forest Program I. Invoker J. MUV LUV EXTRA Contest Info Practice Link Solved A B C D E F G H I J K L 5/12 O - - O - O - - - O ? - O 在比赛中通过 ? 赛后通过 ! 尝试了但是失败了 - 没有尝试 Solutions A. Angle Beats 题意: 给出

2018 China Collegiate Programming Contest Final (CCPC-Final 2018)(A B G I L)

A:签到题,正常模拟即可. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn = 1e5 + 5; 4 struct node{ 5 int id, time; 6 }; 7 node a[maxn]; 8 bool cmp(const node &a, const node &b){ 9 if(a.id^b.id) return a.id < b.id; 10 else return a.