UOJ Round #1 题解
题解:
质量不错的一套题目啊。。(题解也很不错啊)
t1:
首先暴力显然有20分,把ai相同的缩在一起就有40分了
然后会发现由于原来的式子有个%很不方便处理
so计数题嘛 考虑一下容斥
最终步数=初始步数-使用tab键减少的步数=(x-1)*sigma(ai/x)
这个显然就很好维护了
我们考虑对于ai/x只会有根号ai个取值
然后每个值分别实现区间加区间减 这样用差分来做就是n根号x 线段树nlogn根号x
复杂度稍微大了点
满分做法就是枚举x,然后枚举y,计算a[i]/x=y的数有几个,计算用前缀和处理一下
复杂度的话是n/1+n/2+n/3+...=nlogn的
t2:
感觉跟zjoi的dp挺像的。。(虽然简单一点)
首先要先弄出一波结论
就是若我们使用了ai,且ai<aj,那么再使用j就没有任何影响了
所以我们可以先将元素降序排列
令f[i][j]表示前i个,%的值为j是否可行
转移就是从f[i][j]------->f[i+1][j%a[i+1]]
这样第一问就解决了
对于第二问
首先排序是一样的
我们可以令f[j][k] 表示 当前%的值为j,其中有k个值比j大且还没有放(比j小的是一定还没放的)
那么转移就是f[j][k]--->f[j%a[now]][k+sum[now]-sum[j]] (now代表比j小的元素)
或者f[j][k]--->f[j][k-1]
这样复杂度是n^3的
考虑优化状态
令f[i]表示当前%的值为i的方案数
那么考虑转移 f[i]---->f[j] 我们会发现,对于i-j之间的元素(设有y个),只有插入在这个点之后就行了,设x=比j小的元素个数
其实就是x+1个空里插y个数
那就是乘以A(y-1,x+y)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll mo1=;
#define N 11100
ll jc1[N*],jc2[N*],n,m,a[N],f[][N],dp[N];
ll sum[N];
ll x,y,ans;
bool cmp(ll x,ll y)
{
return(x>y);
}
ll get_gcd(ll a,ll b,ll &x,ll &y)
{
// cout<<a<<" "<<b<<endl;
if (b==)
{
x=; y=; return(b);
}
ll xx=get_gcd(b,a%b,y,x);
y-=x*(a/b);
return xx;
}
ll get_ans(ll x,ll y)
{
// cout<<x<<" "<<y<<endl;
if (y==) return();
ll ans=(jc1[x+y-]*jc2[x-])%mo1;
// cout<<jc1[x+y-1]<<" "<<jc2[x-1]<<" "<<ans<<endl;
return ans;
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>n>>m;
for (ll i=;i<=n;i++)
cin>>a[i];
sort(a+,a+n+,cmp);
f[][m]=;
for (ll i=;i<=n-;i++)
{
for (ll j=;j<=m;j++)
if (f[i][j])
f[i+][j%a[i]]=,f[i+][j]=;
}
for (ll j=;j<=m;j++)
if (f[n][j])
f[n+][j%a[n]]=;
ll j;
for (j=m;j>-;j--)
if (f[n+][j]) break;
ans=j; cout<<ans<<endl;
jc1[]=jc2[]=jc1[]=jc2[]=;
for (ll i=;i<=;i++)
{
get_gcd(mo1,i,x,y);
x=(x+mo1)%mo1;
jc1[i]=jc1[i-]*i;
jc1[i]%=mo1;
jc2[i]=jc2[i-]*y;
jc2[i]%=mo1;
}
dp[m]=;
for (ll i=;i<=n;i++) sum[a[i]]++;
for (ll i=;i<=;i++) sum[i]+=sum[i-];
ll num=;
for (ll i=;i<=n;i++) if (a[i]>m) num++;
for (ll i=m;i>=ans;i--)
if (dp[i])
{
ll j;
for (j=;j<=n;j++)
if (a[j]<=i) break;
x=j;
for (ll j=x;j<=n;j++)
{
dp[i%a[j]]+=dp[i]*get_ans(sum[i%a[j]]+,sum[i]--sum[i%a[j]]);
get_ans(n-j+,j-x);
dp[i%a[j]]%=mo1;
}
}
ll ans1=dp[ans];
// cout<<ans1<<"XXX"<<endl;
ans1=ans1*get_ans(n-num+,num);
ans1%=mo1;
cout<<(ans1+mo1)%mo1<<endl;
return ;
}
UOJ Round #1 题解的更多相关文章
- UOJ Round #1 [数论 | DP 排列]
UOJ Round #1 难度很良心啊! 做出了前两题,第三题看到仙人掌就吓哭了. [UR #1]缩进优化 就是求 \[ \sum_{i=1}^n a_i - (x-1)\sum_{i=1}^n\lf ...
- UOJ Round #15 [构造 | 计数 | 异或哈希 kmp]
UOJ Round #15 大部分题目没有AC,我只是水一下部分分的题解... 225[UR #15]奥林匹克五子棋 题意:在n*m的棋盘上构造k子棋的平局 题解: 玩一下发现k=1, k=2无解,然 ...
- 【UOJ Round #5】
构造+贪心/数论 为什么只有两个标题呢……因为第二题我不会…… 怎样提高智商 构造题……然而一开始半天我都yy不出来…… 后来我想:这题应该不会特别麻烦,而且既然样例只给了1,可能再给大一点就让人发现 ...
- 【UOJ Round #1】
枚举/DP+排列组合 缩进优化 QAQ我当时一直在想:$min\{ \sum_{i=1}^n (\lfloor\frac{a[i]}{x}\rfloor + a[i] \ mod\ x) \}$ 然而 ...
- 【UOJ Round #8】
A 一道不错的题,虽然大家都觉得是水题,然而蒟蒻我想出来的好慢……Orz alpq 发现其实就是一个网格图,每一个大块都是同一颜色……横纵坐标互不干扰…… //UOJ Round #8 A #incl ...
- Codeforces Round #556 题解
Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...
- LibreOJ β Round #2 题解
LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...
- Codeforces Round #569 题解
Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...
- Codeforces Round #557 题解【更完了】
Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...
随机推荐
- 将文本(lrc,txt)文件转换成UTF-8格式
UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建.现在已经标准化为RFC 3629.UTF-8用1到6个字节编码UNICODE字符.用在网页上可以同一 ...
- jsp四大对象
发送参数: <a href="deal.jsp?id=1&user=用户&pwd=">处理页</a> 接收参数: <% String ...
- linux 命令收集 阿里云nginx升级等 查看磁盘空间 版本等
—————————————————— 查磁盘 df -h此命令直观的呈现出磁盘大小有多少Gdf -hl文件系统 容量 已用 可用 已用% 挂载点/dev/hdb2 75G 75G 0 100% /就是 ...
- 20155117王震宇 2016-2017-2 《Java程序设计》第六周学习总结
教材学习内容总结 IO流的分类: 根据流的数据对象来分: 高端流:所有的内存中的流都是高端流,比如:InputStreamReader 低端流:所有的外界设备中的流都是低端流,比如InputStrea ...
- Linux 查看服务进程运行时间
Linux 查询服务进程的 运行时间 查看运行时间 ps -eo pid,lstart,etime | grep pid ps -eo pid,lstart,etime | grep 1713 # ...
- SEO之robots.txt
[关键词:robot.txt,sitemap,User-Agent,Disallow,Allow][声明:摘自Wikipedia] 1. 定义:robots.txt(统一小写)是一种存放于网站根目录下 ...
- USB摄像头无法正常读取问题
opencv读取摄像头或者视频一种是早期版本的IplImage结构体,图片就存在结构体指针IplImage*中,另一种是Mat类,两者在操作上略有差异,且opencv2都兼容这两个版本,前面的博客也说 ...
- Vue项目实践中的功能实现与要点
本贴记录项目实践中,各种功能的实现与技术要点,均有待改进. 路由切换的时候,显示loading动画 目前方案是: 在每个页面都手动装载一个loading组件组件的显示依赖vuex里面的一个值 , 在r ...
- Android测试技能树
Android 基础知识 Android 的体系结构 apk 的组成结构 adb 命令的使用 Android 的四大组件 Activity 的生命周期 … 测试/开发环境的准备 JDK 安装 SDK ...
- Spring Boot 多模块项目创建与配置 (一) (转)
Spring Boot 多模块项目创建与配置 (一) 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都 ...