题目:

2044年,Picks建成了人类第一台基于量子理论的银河系信息传递机。Picks游遍了宇宙,雇用了n个外星人来帮他作为信息传递机的中转站。我们将外星人依次编号为1 到n,其中i 号外星人有ai 根手指。外星人都是很低级的,于是Picks花费了很大的精力,才教会他们学会扳手指数数。Picks现在准备传递x 个脉冲信号给VFleaKing,于是他把信号发给1号外星人,然后1号外星人把信号发送给2号外星人,2号外星人把信号发送给3号外星人,依次类推,最后n号外星人把信号发给VFleaKing。但是事情没有Picks想象的那么顺利,由于外星人手指个数有限,所以如果i 号外星人收到了t 个脉冲信号,他会错误的以为发送过来的是tmodai 个脉冲信号,导致只发送了tmodai个脉冲信号出去。Picks希望他发送出去的脉冲信号数量x 与VFleaKing收到的脉冲信号数量y 的差的绝对值尽量小。于是他决定通过重新排列这些外星人的顺序来达到这一目的。请你求出与x 之差最小的y。除此之外,请求出有多少种排列外星人的方式能达到最优解,你只需要输出方案数对998244353(7×17×223+1,一个质数)取模后的结果。

分析:

先把元素从大到小排序,对于新出现的最小值点ai就是关键点。设dp[i][j]为对前i个数取模后余数为j的方案数。当ai为关键点时状态转移方程为:dp[i][j%a[i]]+=dp[i-1][j],当ai为非关键点时状态转移方程为dp[i][j]+=(n-1)*dp[i-1][j]

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int n,d,a[],dp[][];
const int DEV=;
bool cmp(int a,int b){
return a>b;
}
void init(){
cin>>n>>d;
range(i,,n)cin>>a[i];
sort(a+,a++n,cmp);
dp[][d]=;
}
void solve(){
range(i,,n){
range(j,,d)dp[i][j]=((LL)dp[i][j]+(LL)dp[i-][j]*(n-i)%DEV)%DEV;
range(j,,d)dp[i][j%a[i]]=((LL)dp[i][j%a[i]]+dp[i-][j])%DEV;
}
rerange(i,a[n]-,)if(dp[n][i]){
cout<<i<<endl<<dp[n][i]<<endl;
break;
}
}
int main() {
init();
solve();
return ;
}

最新文章

  1. [小程序]那些icons
  2. 统计学 nested_design 嵌套设计
  3. C#实现UTC时间与Datetime转换
  4. JSP标记
  5. 0-N背包为题(动态规划算法)
  6. 【QT】找茬外挂制作
  7. 【JSP】JSP检查字符串是否为数字
  8. 17.1.1.5 Creating a Data Snapshot Using mysqldump 创建一个快照使用mysqldump:
  9. 系列二VS项目软件配置工具介绍
  10. div.2/Bellovin&lt;最长上升子序列&gt;
  11. iOS8中的动态文本
  12. python 列表、元组、字符串、字典、集合、return等梳理
  13. Java第十一周学习总结
  14. Promises-小程序购物车结算
  15. java中static关键字的继承问题
  16. gdb调试的基本使用
  17. java学习之静态内部类
  18. JDK开发环境搭建及环境变量配置
  19. Nginx 反向代理获取设备真实的IP地址
  20. Confluence 6 文档主题合并问答

热门文章

  1. 关于IDEA 单元测试时 【empty test suite】异常的分析!!
  2. laravel5.2总结--服务提供者,契约(Contracts)
  3. 设计模式之第15章-适配器模式(Java实现)
  4. python学习之dictionary函数的用法
  5. sql注入语句大全
  6. Mac 因误使用chmod -R 777 命令更改 /usr/bin 造成终端不能实用,提醒进程已结束的完美解决方案!
  7. 设计模式之迭代器模式 Iterator
  8. 数组线性表ArrayList 和链表类LinkedList
  9. sqlserver导入dbf文件
  10. UNet简单案例讲解