zoukankan      html  css  js  c++  java
  • 20200920数论模拟

    T1:写了40分挂了,不知道为啥,和mx写的一样,对拍答案一样,就是挂了。

    正解:一个数对答案贡献的价值,取决于他在第几个被放进去。曾经拿竞赛题去为难班主任的时候,sy教我多变量变成单变量想,先想一个数a第x次放进A的贡献:$a imes $ $sum_{i=x+1}^{n imes m+1} frac{1}{i}$(提前感谢whh对本博客的大力支持)

    由一个数的一个位置推出一个数的所有位置:$frac{a}{n imes m}$ $ imes$ $sum_{i=2}^{n imes m+1} sum_{j=i}^{n imes m+1}frac{1}{j}$

    再由一个数的所有位置推出所有数的所有位置:$frac{sum_{i=1}^{n} a}{n imes m}$ $ imes$ $sum_{i=2}^{n imes m+1} sum_{j=i}^{n imes m+1}frac{1}{j}$

    代码明天去学校看whh代码写o(*////▽////*)q:

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #define ll long long
     5 using namespace std;
     6 const int maxn=2e7+10,mod=998244353;
     7 int n,m,a;
     8 ll inv[maxn];
     9 void solve(){
    10     inv[1]=1;
    11     for (int i = 2;i <= n*m+1;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; //线性求逆元 
    12 }
    13 int main(){
    14     scanf ("%d%d",&n,&m);
    15     solve();ll tmp=0,sum=0;
    16     for (int i = m*n+1;i >= 2;i--){
    17         tmp+=inv[i]; tmp%=mod;
    18         sum+=tmp;sum%=mod;//维护逆元合 
    19     }
    20     sum=(sum*inv[m*n])%mod;
    21     ll ans=0;
    22     for (int i = 1;i <= n;i++){
    23         scanf ("%d",&a);
    24         ans+=a;ans%=mod;
    25     }
    26     (ans*=m)%=mod;
    27     printf("%lld
    ",ans*sum%mod);
    28     return 0;
    29 }

    T2:写了30分,也挂了,输出double型("%llf")就是手贱多打个l我也是很强,$l$==$r$的时候很显然,$n$个$l$比大小就好了

    正解没懂,明天上学再问问


    T3:暴力20分,正解先鸽了


    T4:写的时候自己也不知道能写多少,但是过了30分,正解继续鸽

    几道题的暴力都很显然,感觉T1正解推一推也是能想出来的,就是偶尔手贱

  • 相关阅读:
    HDU 2108 Shape of HDU (判断是不是凸多边形 叉乘)
    三,对于printf函数和C语言编程的初步拓展
    二,养成良好的写代码习惯
    一,彻底理解第一个C语言程序 Hello World
    归并排序(看了别人的博客明白了也写个博客,希望这样不算抄袭~)
    汉诺塔
    最小生成树
    堆排序
    二叉排序树
    双关键字快排
  • 原文地址:https://www.cnblogs.com/very-beginning/p/13701264.html
Copyright © 2011-2022 走看看