#22. 【UR #1】外星人

2044年,Picks建成了人类第一台基于量子理论的银河系信息传递机。

Picks游遍了宇宙,雇用了 nn 个外星人来帮他作为信息传递机的中转站。我们将外星人依次编号为 11 到 nn,其中 ii 号外星人有 aiai 根手指。

外星人都是很低级的,于是Picks花费了很大的精力,才教会他们学会扳手指数数。

Picks现在准备传递 xx 个脉冲信号给VFleaKing,于是他把信号发给11号外星人,然后11号外星人把信号发送给22号外星人,22号外星人把信号发送给33号外星人,依次类推,最后nn号外星人把信号发给VFleaKing。

但是事情没有Picks想象的那么顺利,由于外星人手指个数有限,所以如果 ii 号外星人收到了 tt 个脉冲信号,他会错误的以为发送过来的是 tmodaitmodai 个脉冲信号,导致只发送了 tmodaitmodai 个脉冲信号出去。

Picks希望他发送出去的脉冲信号数量 xx 与VFleaKing收到的脉冲信号数量 yy 的差的绝对值尽量小。于是他决定通过重新排列这些外星人的顺序来达到这一目的。请你求出与 xx 之差最小的 yy。除此之外,请求出有多少种排列外星人的方式能达到最优解,你只需要输出方案数对 998244353998244353(7×17×223+17×17×223+1,一个质数)取模后的结果。

输入格式

第一行两个正整数n,xn,x。

接下来一行有 nn 个正整数 aiai,表示 ii 号外星人的手指数。

输出格式

第一行一个整数表示最优情况下VFleaKing收到的脉冲数量。

第二行一个整数表示达到最优情况的方案数。

样例一

input

2 15
7 10

output

5
1

explanation

共两种可行方案:

  1. 15mod7=115mod7=1,1mod10=11mod10=1
  2. 15mod10=515mod10=5,5mod7=55mod7=5

显然第二种方案更优。

样例二

input

7 33
2 4 6 8 16 16 32

output

1
5040

explanation

每个排列方案都是最优解。

样例三

见样例数据下载

限制与约定

对于每个测试点,答对第一问可获得 40% 的分数,答对第二问可获得 60% 的分数。

请注意你必须输出两个整数否则会判0分。假如你只做了第一问,那么你应该输出你第一问的答案,然后再随便输出一个第二问的答案。

测试点编号 nn的规模 xx 和 aiai的规模
1 n≤10n≤10 x,ai≤20x,ai≤20
2 n≤50n≤50 x,ai≤100x,ai≤100
3
4 n≤100n≤100 x,ai≤500x,ai≤500
5
6
7 n≤1000n≤1000 x,ai≤5000x,ai≤5000
8
9
10

时间限制:1s1s

空间限制:256MB

详解

f[i][j]代表 处理a[i] 能否得到 j

g[i][j] 记录方案数

考虑取模运算。一个非常基础的性质是:当 x≥ai 时,x mod ai<ai。当 x < ai 时,x mod ai=x 。

那么对于每个ai,要么就把它放在当前位置,现在生效,要么把它放在后面的n−i个位置,使它永不生效,因为如果你先模了一个小于ai的数,再模ai结果是不会变的。

 1 #include <cstdio>
 2 #include <cctype>
 3 #include <algorithm>
 4
 5 typedef long long LL;
 6
 7 const int mod=998244353;
 8 const int MAXN=1010;
 9 const int MAXM=5010;
10
11 int n,s;
12
13 int a[MAXM];
14
15 bool f[MAXN][MAXM];
16
17 LL g[MAXN][MAXM];
18
19 inline bool cmp(int a,int b) {return a>b;}
20
21 inline void read(int&x) {
22     int f=1;register char c=getchar();
23     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
24     for(;isdigit(c);x=x*10+c-48,c=getchar());
25     x=x*f;
26 }
27
28 inline void running() {
29     f[0][s]=1;g[0][s]=1;
30     for(int i=1;i<=n;++i) {
31         for(int j=s;j>=0;--j) {
32               f[i][j%a[i]]|=f[i-1][j];
33               g[i][j%a[i]]=(g[i][j%a[i]]+g[i-1][j])%mod;
34         }
35         if(i!=n) {
36             for(int j=s;j>=0;--j) {
37                 f[i][j]|=f[i-1][j];
38                 g[i][j]=(g[i][j]+g[i-1][j]*(n-i))%mod;
39             }
40         }
41     }
42     for(int i=s;i>=0;--i)
43       if(f[n][i]) {
44           printf("%d\n",i);
45           printf("%lld\n",g[n][i]);
46           break;
47       }
48     return;
49 }
50
51 int hh() {
52     read(n);read(s);
53     for(int i=1;i<=n;++i) read(a[i]);
54     std::sort(a+1,a+1+n,cmp);
55     running();
56     return 0;
57 }
58
59 int sb=hh();
60 int main(int argc,char**argv) {;}

代码

转载于:https://www.cnblogs.com/whistle13326/p/7507351.html

#22. 【UR #1】外星人相关推荐

  1. SQL优化之not in

    阅读目录 案例语句 分析手段 如何优化 招聘信息 一直从事运维的工作,免不了优化一些SQL语句,因为本人比较懒的原因,很多经典的案例没有记录下来,深表遗憾 回到顶部 案例语句 某大型房地产公司,巡检日 ...

  2. 读书笔记:多智能体机器学习(二)

    文章目录 双人矩阵博弈学习 Nash均衡 求解Nash均衡 线性规划 梯度上升算法 Gradient Ascent Algorithm WoLF-IGA (win or learn fast-poli ...

  3. 前端转golang从小白到实战自学笔记(2023/3/1)

    了解:https://www.runoob.com/go/go-concurrent.html golang学习方向 区块链研发工程师 go服务器=>(特点:数据处理,处理大并发)/游戏软件工程 ...

  4. 2020.5月做题记录

    2020.5.3 NOI2016 优秀的拆分 [链接] 想写SAM结果自闭了. BZOJ3064 CPU监控 线段树历史最大值模板题. 注意到其实带维护历史最大值最大的问题时维护tag. 这里我们将t ...

  5. oracle12C--DG FAR SYNC 部署(前提为搭建好12C的DG)

    <<往期12CDG搭建>> 一,理解同步异步模式 01, 使用LGWR 进程的SYNC 方式 1)Primary Database 产生的Redo 日志要同时写到日志文件和网络 ...

  6. Golang基础笔记

    Go笔记 一.注释 单行注释 //单行注释 多行注释 /*这是多行注释这是一个main函数,这个是go语言启动的入口 */ 二.变量 声明变量使用var关键字: var name type var 变 ...

  7. UOJ #22 外星人

    描述 2044年,Picks建成了人类第一台基于量子理论的银河系信息传递机. Picks游遍了宇宙,雇用了 个外星人来帮他作为信息传递机的中转站.我们将外星人依次编号为 到 ,其中 号外星人有 根手指 ...

  8. [UR#22]月球列车

    题目 传送门 to UOJ 思路 妹妹说:"其实不怎么难,真的是道签到题." 替代理论冒头了,母系社会正在崛起! 首先拆位.记 vwv_wvw​ 为 aia_iai​ 的按位取反值 ...

  9. 《请不要回应外星人2019》

    作者 | 若名 出品 | AI科技大本营 今天早上,关于"加拿大天文学家发现 15 亿光年外讯号"的话题一度被推到了微博热搜榜第二位,当然也引发了全球范围内的关注.舆论导向都是,& ...

最新文章

  1. 一言难尽,Jpa这个功能差点让我丢了工作
  2. 特别的需要名言警句提醒一下自己
  3. Java HashMap工作原理深入探讨
  4. javascript必须知道的知识要点(一)
  5. 太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告的数据处理Ini怎么?太阳能电池基 爱问知识人...
  6. java的引用类型_JAVA类型(引用类型变量和使用)
  7. Direct X 修复
  8. 【转】和菜鸟一起学linux之DBUS基础学习记录
  9. php 删除判断是否存在,PHP – 判断utf-8编码是否存在BOM并自动删除
  10. Nacos配置管理基础应用
  11. 经典怀旧软件----PP点点通
  12. FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法
  13. 华为开发后端实习体验总结帖(详细)
  14. SYN报文什么时候会被丢弃?
  15. OC学习笔记之011IOS应用开发入门--控件2进度条、拖动条、警告框、日期选择器、选择器
  16. 模块Datetime
  17. [论文阅读笔记01]Neural Architectures for Nested NER through Linearization
  18. android通过webview调起支付宝app支付
  19. 一行代码实现蒲公英市场APP检查更新
  20. Python基础--元组的创建、删除、修改、访问以及元组推导式

热门文章

  1. IntelliJ IDEA如何设置添加类时注释作者信息和日期时间
  2. java什么是派生,Java中所有的类都是从( )类或其子类派生而来的。
  3. Kubernetes的yaml文件中的command使用
  4. Linux和Windows下使用printf的差别
  5. 实现一个简单的模板引擎,输入模板和数据,输出html
  6. spark on yarn
  7. scikit-learn学习笔记(二)load_files加载自己的文件
  8. node-red教程2 第一条数据流
  9. RDD基本转换操作:zipWithIndex、zipWithUniqueId
  10. 认识JavaWeb,servlet, JSP, Tomcat, http协议,Web服务器