参考自:https://blog.csdn.net/dreaming__ldx/article/details/84976834

    https://blog.csdn.net/acterminate/article/details/79339494

题意:

  给你一个数组,将数组里的所有元素进行全排列,然后

借助这两个条件求出Σfa 即可。

分析:

  n可以取到10^6,Time limit 是 3000 ms,直接枚举有n!种情况,显然优先认为这是个组合数学问题,找出一个通式本题即可AC。

  从n个位置中挑出n-i+1(大于等于这个数的个数)个位置,这n-i+1个位置中这个数必须是第一位,其他数可以任意排列,即A(n-i,n-i)。然后把剩下的小于他的数插入剩下的空位,即C(n,n-i+1)*A(i-1,i-1)。化简得A(n,n)/(n-i+1)。

  最终结果就是:n!/(n-l+1)%mod 。

实现:现在就是求逆元的问题了。

关于逆元的知识可参考:https://www.cnblogs.com/Judge/p/9383034.html

附上AC代码:

 #include <iostream>
#include <algorithm> using namespace std;
#define mod 1000000007
typedef long long ll; ll a[];
ll qp(ll a, ll b)
{
ll base = a, ans = ;
while (b)
{
if (b & )
{
ans *= base;
ans %= mod;
}
base *= base;
base %= mod;
b >>= ;
}
return ans;
}
int main()
{
ll n;
cin >> n;
for (ll i = ; i <= n; i++)
{
cin >> a[i];
}
ll fac_n = ;
for (ll i = ; i <= n; i++)
{
fac_n *= i;
fac_n%=mod;
}
sort(a+, a + n+);
ll ans = , now;
for (ll i = ; i <= n; i = now)
{
now = i;
while (a[i] == a[now] && now <= n)
now++;
if (now <= n)
{
ans = (ans + fac_n * qp(n - i + , mod - ) % mod * (now - i) % mod * a[i] % mod)%mod;//乘(now-i)是因为有(now-i)个a[i]情况相同。
}
}
cout << ans%mod << endl;
}

补充:第一次写博客,如有不足,欢迎指出。

  

最新文章

  1. 在PHP中如何实现在做了么个操作后返回到指定页面
  2. Lua小技巧
  3. Revit二次开发示例:Journaling
  4. 单核CPU,多线程与性能
  5. oracle 对象权限 系统权限 角色权限
  6. javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景
  7. 可用于Windows Server 2008 R2的Xbox One手柄、接收器驱动
  8. 关于控制台输出 警告 log4j:WARN No appenders could be found for logger
  9. iOS获取各种数据方法整理以及IDFA与IDFV使用环境
  10. zTree 节点文字过多处理方法
  11. Codeforces.1082E.Increasing Frequency(思路)
  12. ES6字符串和正则表达式改动
  13. Shiro+CAS
  14. spring boot 通过controller跳转到指定 html 页面问题以及请求静态资源问题
  15. [vue]webpack中使用组件
  16. Android开发——官方推荐使用DialogFragment替换AlertDialog
  17. hdu 6305 RMQ Similar Sequence——概率方面的思路+笛卡尔树
  18. ajax执行失败原因
  19. Summarize to the Power of Two(map+思维)
  20. Oracle 分组函数

热门文章

  1. oracle获取当天时间的最开始的时间和最结尾的时间
  2. 深入理解Java的switch...case...语句
  3. Oracle数据库备份---导出与导入
  4. Linux命令学习-tail命令
  5. dapper支持DataSet
  6. C#如何加载程序运行目录外的程序集 (转)
  7. 【POJ - 1573】Robot Motion
  8. JDK1.8--体验Stream表达式,从一个对象集合中获取每一个对象的某一个值返回新集合
  9. python面向过程编程小程序- 模拟超市收银系统
  10. Flask项目常见面试问题