生活随笔
收集整理的這篇文章主要介紹了
济南学习 Day2 T2 am
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】
有N個數,隨機選擇一段區間,如果這段區間的所有數的平均值在[l,r]中則
你比較厲害。求你比較厲害的概率。
【輸入格式】
第一行有三個數N,l,r,含義如上描述。
接下來一行有?個數代表每一個數的值。
【輸出格式】
輸出一行一個分數 a/b
代表答案,其中a,b互質。如果答案為整數則直接輸出該
整數即可。
【樣例輸入 1】
4 2 3
3 1 2 4
【樣例輸出 1】
7/10
【樣例輸入 2】
4 1 4
3 1 2 4
【樣例輸出 2】
1
【樣例解釋】
塔外面有棵樹。
【數據規模與約定】
對于30%的數據,1<=N<=10^4.
60%的數據,1 ≤ N≤ 10 5 。
對于100%的數據,1 ≤ N ≤ 5× 10 5 ,0 < l ≤ r ≤ 100。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 using namespace std;
6 #ifdef unix
7 #define LL "%lld"
8 #else
9 #define LL "%I64d"
10 #endif
11 #define lb(x) ((x)&(-(x)))
12 const int maxn=
500010;
13 int n,l,r,y[maxn],z[maxn],w[maxn],x[maxn];
14 bool cmp(
int a,
int b)
15 {
16 return z[a]>
z[b];
17 }
18 void insert(
int p)
19 {
20 for (;p<=n;p+=
lb(p))
21 w[p]++
;
22 }
23 int query(
int p)
24 {
25 int ans=
0;
26 for (;p;p-=
lb(p))
27 ans+=
w[p];
28 return ans;
29 }
30 long long solve()
31 {
32 for (
int a=
1;a<=n;a++
)
33 z[a]+=z[a-
1];
// 前綴和
34 for (
int a=n+
1;a>=
2;a--
)
35 z[a]=z[a-
1];
// 向后平移一位
36 z[
1]=
0;
37 n++
;
38 for (
int a=
1;a<=n;a++
)
39 x[a]=
a;
40 sort(x+
1,x+n+
1,cmp);
41 memset(w,
0,
sizeof(w));
42 long long ans=
0;
43 for (
int a=
1;a<=
n;)
44 {
45 int b=
a;
46 while (b<=n && z[x[b]]==
z[x[a]])
47 b++
;
48 for (
int c=a;c<b;c++
)
49 ans+=query(x[c]-
1);
50 for (
int c=a;c<b;c++
)
51 insert(x[c]);
52 a=
b;
53 }
54 n--
;
55 return ans;
56 }
57 long long gcd(
long long a,
long long b)
58 {
59 if (!b)
return a;
60 else return gcd(b,a%
b);
61 }
62 int main()
63 {
64
65 scanf(
"%d%d%d",&n,&l,&
r);
66 for (
int a=
1;a<=n;a++
)
67 scanf(
"%d",&
y[a]);
68 for (
int a=
1;a<=n;a++
)
69 z[a]=y[a]-
l;
70 long long ans=
solve();
71 for (
int a=
1;a<=n;a++
)
72 z[a]=r-
y[a];
73 ans+=
solve();
74 long long up=
ans;
75 long long down=(
long long)n*(n+
1)/
2;
76 up=down-
up;
77 long long g=
gcd(up,down);
78 up/=
g;
79 down/=
g;
80 if (up==
0) printf(
"0\n");
81 else
82 {
83 if (down==
1) printf(
"1\n");
84 else printf(LL
"/" LL
"\n",up,down);
85 }
86
87 return 0;
88 }
思路:轉成區間和小于等于0,然后就是前綴和逆序對(和Codevs 1516 比較相似)
轉載于:https://www.cnblogs.com/suishiguang/p/6035264.html
總結
以上是生活随笔為你收集整理的济南学习 Day2 T2 am的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。