日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

济南学习 Day2 T2 am

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 济南学习 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。