2 条题解

  • 0
    @ 2025-11-28 19:28:56

    map+前缀和(其实set更好)

    #include<bits/stdc++.h> 
    using namespace std;
    using ll=long long;
    map<ll,int>mp;
    int main()
    {
    	int n;
    	cin>>n;
    	ll ay;
    	for(int i=1;i<=n;i++){
    		cin>>ay;
    		mp[ay]++;
    	}	
    	//终态:删完 
    	//过程:对不同元素进行等概率删除 
    	int nu=mp.size();
    	vector<double>pre(n+1,0);
    	vector<double>a(n+1,0);
        double j=1.0;
    	for(int i=1;i<=n;i++){
            
    		a[i]=1/j;
    		pre[i]=pre[i-1]+a[i];
            j++;
    	}
    	cout<<fixed<<setprecision(8)<<pre[nu]<<endl;
    }
    
    • 0
      @ 2025-11-25 17:35:53

      查重计数+调和级数

      瓶颈在排序查重上

      较多的数使用欧拉公式避免过长循环

      测试发现数据集没有较小的数,直接使用欧拉公式避开循环

      int main() {
          int t;
          read(t);
          for (int i = 0; i < t; ++i) {
              read(a[i]);
          }
          radix_sort_unsigned(a, t);
          int m = 0;
          int p = 0;
          for (int i = 1; i < t; ++i) {
              if (a[i] != a[p]) {
                  a[++p] = a[i];
              }
          }
          m = p + 1;
          double s = 0;
          s = log(m) + 0.5772156649015328606 + 1.0 / (2.0 * m);
          char out_str[32];
          sprintf(out_str, "%.8f", s);
          write((const char *)out_str);
          return 0;
      }
      
      • 1

      信息

      ID
      130
      时间
      3000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      36
      已通过
      5
      上传者