3,[2,0,2]
2
可能的站法(1 2 3), (3 2 1)
3,[1,1,1]
0
不存在这样的站法
其中1<=n<=1000000, 0<=a_i<=1000000
class Solution {
public:
/**
*
* @param n int整型
* @param a int整型vector
* @return int整型
*/
int solve(int n, vector<int>& a) {
const int M = 1e9+7;
int s = 1, cnt[1000001];
memset(cnt, 0, sizeof(cnt));
for(int i=0;i<a.size();i++)
cnt[a[i]]++;
if(n&1){
for(int i=0;i<n;i++){
if(i==0){
if(cnt[0] != 1)
return 0;
}else{
if(((i&1) && cnt[i]!=0) || (!(i&1) && cnt[i]!=2))
return 0;
if(!(i&1))
s = (s<<1)%M;
}
}
}else{
for(int i=0;i<n;i++){
if(((i&1) && cnt[i]!=2) || (!(i&1) && cnt[i]!=0))
return 0;
if(!(i&1))
s = (s<<1)%M;
}
}
return s;
}
}; class Solution {
public:
int solve(int n, vector<int>& a) {
vector<int> b(n);
for (auto num: a) if (num < 0 || num >= n || num & 1 == n & 1 || b[num]++ == 2) return 0;
for (int i = !(n & 1); i < n; i += 2) if ((i == 0 && b[i] != 1) || (i > 0 && b[i] != 2)) return 0;
long long res = 1, base = 2, mod = 1000000007;
while (n >>= 1) {
if (n & 1) res = res * base % mod;
base = base * base % mod;
}
return res;
}
}; class Solution {
public:
/**
*
* @param n int整型
* @param a int整型vector
* @return int整型
*/
const int M = 1000000007;
int qpow(long long a, long long n) {
long long res = 1;
while (n) {
if (n & 1) res = (res * a) % M;
a = (a * a) % M;
n >>= 1;
//cout<< res<< " "<< a<< " "<< n<< endl;
}
return (int)res;
}
int solve(int n, vector<int>& a) {
// write code here
if (n<= 0) return 0;
if (n==1) return (a[0] == 0);
sort(a.begin(), a.end());
int now, start;
if (n & 1) {
if (a[0] != 0) return 0;
now = 2;
start = 1;
} else {
now = 1;
start = 0;
}
while (start < a.size()) {
if (a[start] != now || a[start+1] != now) return 0;
start += 2;
now += 2;
}
return qpow((long long)2, (long long)n/2);
}
}; class Solution {
public:
/**
*
* @param n int整型
* @param a int整型vector
* @return int整型
*/
static const int N = 1000001;
int solve(int n, vector<int>& a) {
// write code here
const int MOD = 1000000007;
int len = a.size();
int count[N] = {0};
int ans=1;
for(auto &k : a) count[k]++;
if(n%2==0){
for(int i=0;i<n;i++){
if(i%2==1 && count[i]!=2) return 0;
if(i%2==0 && count[i]!=0) return 0;
if(i%2==0) ans=ans*2%MOD;
}
}
if(n%2==1){
for(int i=0;i<n;i++){
if(i==0){
if(count[0]!=1) return 0;
}else{
if(i%2==1 && count[i]!=0) return 0;
if(i%2==0 && count[i]!=2) return 0;
if(i%2==0) ans=ans*2%MOD;
}
}
}
return ans;
}
};