• FZU


    /*
      看来我思维方面还是...可能做题太少,还没建立题感,别人能想到想明白的,我却很难才能相通
      
      就题论题...这题的关键是,胖兄弟有n张牌,也就有n种出牌的可能,把这n种情况下,可能得到的点数总和求出来,再除n得期望
      
      点数总和怎么算?
      把maze的所有牌排个序,比当前胖兄弟抽出的牌的点数要少的情况,就是胖兄弟出该牌得到的点数
      
      以及,n种情况,都是独立考虑的,(虽然题目有提到过,一旦两人各自取出一张牌以后,这两张牌就不再出现)...按理说,我这么排序以后,用 lower_bound 来算,其实总觉得有点不对...
      
      因为可能,胖兄弟第一轮出3,第二轮再出5,这么说,maze的牌中,比5小的那些牌,在胖兄弟出3时,可能有至少1张已经出过了,按照出过的牌排出考虑范围外,这张牌在第二轮就不应该被纳入考虑
      
      所以,我最后的猜测是,可能对于胖兄弟的每一张牌,我们都是当作独立事件考虑,我们默认当前就是第一局,并将最后得到的结果除以n(也就是n张牌,可以理解为n轮),得到期望
      
      总之这题理解也不到位,如果有时间,务必返工
      
      最后,很有用的两个函数:
      lower_bound 和 upper_bound,学习一下:
      
      http://blog.csdn.net/jack_incredible/article/details/7377035
    */


    #include <cstdio>
    #include <iostream>
    #include <algorithm> 
    using namespace std;
    const int N = 1e4 + 10;
    int a[N], b[N];
    int main()
    {
    	int k, n;
    	scanf("%d", &k);
    	for (int c = 1; c <= k; c++)
    	{
    		scanf("%d", &n);
    		for (int i = 0; i < n; i++) scanf("%d", a + i);
    		for (int i = 0; i < n; i++) scanf("%d", b + i);
    		
    		sort(b, b + n);
    		int ans = 0;
    		for (int i = 0; i < n; i++)
    		{
    			int* t = lower_bound(b, b + n, a[i]);
    			ans += (t - b);
    		}
    		printf("Case %d: %.2f
    ", c, (double)ans / (double) n);
    	}
    	return 0;
    }


  • 相关阅读:
    Hibernate工作原理
    Java jar包查询下载方法
    http状态码(HTTP Status Code)
    Android Broadcast Receiver (广播接收者)
    Android ViewPager组件
    Android Activity属性
    Android XML Drawable
    Android 样式布局
    Android Activity的LaunchMode四种模式
    Android Layout布局
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789539.html
Copyright © 2020-2023  润新知