求hack atc的e
  • 板块学术版
  • 楼主shitbro
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/7/6 12:10
  • 上次更新2023/11/6 23:34:31
查看原帖
求hack atc的e
90972
shitbro楼主2020/7/6 12:10
#include<bits/stdc++.h>
#define MAXN 200005
#define mod 1000000007
using namespace std;
int a[MAXN],zs = 0,fs = 0;
bool cmp(int a,int b) {
	return a < b;
}
int main() {
	int n,k; scanf("%d%d",&n,&k);
	for(int i = 1;i <= n;i ++) scanf("%d",&a[i]); 
	sort(a + 1,a + 1 + n,cmp);
	for(int i = 1;i <= n;i ++) {
		if(a[i] < 0) fs ++;
		else zs ++;
	}
	if(fs == n) {
		long long sum = 1;
		if(k % 2) for(int i = n;i >= n - k + 1;i --) sum = (sum % mod * a[i] % mod) % mod;
		else for(int i = 1;i <= k;i ++) sum = (sum % mod * a[i] % mod) % mod;
		printf("%lld",(sum % mod + mod) % mod);
		return 0;
	}
	else if(n == k) {
		long long sum = 1;
		for(int i = 1;i <= n;i ++) sum = (sum % mod * a[i] % mod) % mod;
		printf("%lld",(sum % mod + mod) % mod);
		return 0;
	}
	else {
		long long sum = 1;
		int l = 1,r = n,tot = 0;
		while(tot < k) {
			if(tot != k - 1 && a[l] % mod * a[l + 1] % mod >= a[r] % mod * a[r - 1] % mod) {
				sum = (sum % mod * a[l] % mod * a[l + 1] % mod) % mod;
				l += 2;
				tot += 2;
			}	
			else {
				sum = (sum % mod * a[r] % mod) % mod;
				r --;
				tot ++;
			}
		}
		printf("%lld",(sum % mod + mod) % mod);
		return 0;
	}
}
2020/7/6 12:10
加载中...