记录编号 |
338105 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
__卡片游戏 |
最终得分 |
100 |
用户昵称 |
rewine |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.609 s |
提交时间 |
2016-11-05 07:52:55 |
内存使用 |
14.01 MiB |
显示代码纯文本
#define pro __attribute__((optimize("-Os")))
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long lg;
namespace PROIO {
template <class T>
pro inline void read(T &x) {
register bool flag = 0;register char c;
while((c=getchar())>'9'||c<'0')
if(c == '-') flag = 1;
x = c-'0';
while((c=getchar())<='9'&&c>='0')
x = ((x<<1)+(x<<3))+c-'0';
if(flag) x = -x;
}
template <class T>
pro inline void write(register T x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x >= 10)
write(x/10);
putchar(x%10+'0');
}
}
using namespace PROIO;
#define MAXX 500009
#define int long long
int n,l,r;
int fa = 0,fb = 0;
int f1[MAXX],f2[MAXX],a[MAXX];
int t[MAXX];
lg gcd(lg a,lg b) {
return b==0 ? a:gcd(b,a%b);
}
void Msort(int l,int r,int f[]) {
if(l == r) return;
int m = (l+r) >> 1;
Msort(l,m,f);Msort(m+1,r,f);
int i = l,j = m+1,top = 0;
while(i <= m && j <= r) {
if(f[i] <= f[j]) t[++top] = f[i++];
else t[++top] = f[j++],fa += m-i+1;
}
while(i <= m) t[++top] = f[i++];
while(j <= r) t[++top] = f[j++];
memcpy(f+l,t+1,sizeof(int)*top);
}
void work() {
read(n);read(l);read(r);
bool ok = 1;n++;
for (int i = 2; i <= n; i++) {
read(a[i]);
f1[i] = f1[i-1]+a[i]-l;
f2[i] = f2[i-1]+r-a[i];
}
Msort(1,n,f1);
Msort(1,n,f2);
if(fa == 0) {
puts("1");
return;
}
fb = n*(n-1)/2;
fa = fb - fa;
lg k = gcd(fa,fb);
write(fa/k);putchar('/');write(fb/k);
}
signed main() {
freopen("xgame.in","r",stdin);
freopen("xgame.out","w",stdout);
work();
return 0;
}