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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 5101(二分)

發布時間:2025/3/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 5101(二分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5101

題意:給定一些集合,選擇兩個來自不同集合的數,加和大于k,問有多少種選擇方案

答案=從所有數中選擇的兩個加和大于k的數的方案數-在同一個集合中選擇的兩個加和大于k的數的方案數

而對于同一個集合中選擇的兩個加和大于k的方案數是可以直接排序然后利用單調性快速統計出來的。


#include <cstdio> #include <cstring> #include <vector> #include <algorithm> #define LL __int64 using namespace std;int t; int n,k;int main() {scanf("%d",&t);while(t--){vector<int>q[1100];scanf("%d%d",&n,&k);for(int i=1; i<=n; i++){int m;scanf("%d",&m);for(int j=1; j<=m; j++){int x;scanf("%d",&x);q[i].push_back(x);q[0].push_back(x);}sort(q[i].begin(),q[i].end());}sort(q[0].begin(),q[0].end());LL ans=0;for(int i=1; i<=n; i++){for(int j=0; j<(int)q[i].size(); j++){int v=q[i][j];LL num1=q[0].end()-lower_bound(q[0].begin(),q[0].end(),k-v+1);LL num2=q[i].end()-lower_bound(q[i].begin(),q[i].end(),k-v+1);ans+=num1-num2;}}printf("%I64d\n",ans/2);}return 0; }


總結

以上是生活随笔為你收集整理的hdu 5101(二分)的全部內容,希望文章能夠幫你解決所遇到的問題。

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