欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程资源 > 编程问答 >内容正文

编程问答

gym-尊龙游戏旗舰厅官网

发布时间:2025/1/21 编程问答 24 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 gym-100676e time limit exceeded? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

原题链接 https://odzkskevi.qnssl.com/1110bec98ca57b5ce6aec79b210d2849?v=1491063604

 

**********************************************************************************************************************

题意:选择v[i]里的两个数相减的绝对值小于32,问你有多少对这样的数

解题思路:看题目就知道暴力枚举肯定会超时xd;

     所以就标记一下v[i],每一次找v[i]前后31个数,看看有多少个, 减去重复的,就是答案。

**********************************************************************************************************************

1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn = 10000 10; 6 int num[maxn]; 7 int a[maxn]; 8 int sum[maxn]; 9 int vis[maxn]; 10 int main() 11 { 12 int t; 13 cin >> t; 14 while(t--){ 15 memset(a, 0, sizeof(a)); 16 memset(num, 0, sizeof(num)); 17 memset(vis, 0, sizeof(vis)); 18 int n, i, ans=0; 19 cin >> n; 20 21 for(i=0;i){ 22 cin >> a[i]; 23 num[a[i]] ; 24 } 25 sum[0]=0; 26 for(i=1;i)//通过前缀和的方法求出有多少个符合 27 sum[i]=sum[i-1] num[i]; 28 // for(i=1;i< 150 ;i ) 29 // cout << i << " " << sum[i] << endl; 30 for(i=0;i){ 31 int x = a[i]; 32 int rightn=min(10000, x 31);//只往右边跑,避免左右一起跑出现重复 33 if(!vis[x]){ 34 ans =num[x] * (sum[rightn] - sum[x]);//加上[x,x 31]的数的个数 35 ans =num[x]*(num[x]-1)/2;//如果同一个数出现了多次,c(2, n)个 36 vis[x]=1; 37 } 38 } 39 cout << ans << endl; 40 } 41 return 0; 42 }

 

转载于:https://www.cnblogs.com/denghaiquan/p/6666226.html

总结

以上是尊龙游戏旗舰厅官网为你收集整理的gym-100676e time limit exceeded?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图