题意:挺好懂得

分析:先计算出如果不能用(减2)操作,至少需要多少个(减3)操作,这个很好计算

然后就是尽量多的去减少(减3)操作,肯定先抹平 余2 和 余1 的,然后就可以了

#include <cstdio>
#include <iostream>
#include <ctime>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=1e5+;
const int INF=0x3f3f3f3f;
const int mod=1e9+;
int f[N],a[N],d[];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
memset(d,,sizeof(d));
int sum=,c=;
for(int i=;i<=n;++i){
scanf("%d",&a[i]);
++d[a[i]%];
sum+=a[i]/;
if(a[i]%==){
if(a[i]>)++c;
}
}
int ret=;
for(int i=;i<=m;++i){
int ans;
if(i<=d[]+d[]+d[]+d[]){
ans=d[]+d[]+d[]+d[]-i+d[]+d[]+d[]+sum*;
}
else {
int k[];
for(int j=;j<=;++j)k[j]=d[j];
k[]=k[];k[]=;
k[]+=k[];k[]=;
k[]=;
int tmp=sum-c;
k[]+=c;k[]+=c;
int t=i-d[]-d[]-d[]-d[];
if(t<=k[]){
k[]-=t;
ans=tmp*+k[]+k[];
}
else {
t-=k[];k[]=;
int p=t/;
if(tmp<=p){
p-=tmp;
tmp=;
}
else tmp-=p,p=;
t=t%+p*;
t/=;
ans=max(,tmp*+k[]-t);
}
}
ret=(ret+ans)%mod;
}
printf("%d\n",ret);
}
return ;
}

最新文章

  1. poj2774 后缀数组2个字符串的最长公共子串
  2. javascript之DOM篇二(操作)
  3. each的用法
  4. 初学java之事件响应(结合接口来设置在同一个界面上!)
  5. Docker搭建MySQL服务
  6. Mysql 存储过程小例子
  7. Centos 6 设置静态 IP 地址
  8. Innobackupex全备恢复(原理、演示)
  9. 另一种的SQL注入和DNS结合的技巧
  10. Java并发编程笔记之Timer源码分析
  11. robotframework接口测试(一)—Get request json
  12. 获取EasyUI的treegrid的checkbox所有已勾选的数据
  13. Js_图片切换左右点击
  14. hdwiki 部署
  15. Spring Boot Unregistering JMX-exposed beans on shutdown
  16. 【 腾讯敏捷转型No.4 】为什么敏捷团队不要超过15人
  17. [Done]ftp使用小结
  18. l2正则化
  19. 华为笔试——C++特定位数比较
  20. JavaScript严格模式下this指向

热门文章

  1. Thread的第一天学习
  2. Xamarin.Android 入门之:Xamarin快速入门
  3. Hibernate逍遥游记-第7章 Hibernate的检索策略和检索方式(&lt;set lazy=&quot;false&quot; fetch=&quot;join&quot;&gt;、left join fetch、FetchMode.JOIN、)
  4. DefaultHashOperations multiget的一个坑
  5. Android viewPage notifyDataSetChanged无刷新
  6. 【转载】String、StringBuffer与StringBuilder之间区别
  7. eclipse jetty插件安装(离线版)
  8. 实现微信好友列表的php代码
  9. python判断文件目录是否存在
  10. GET,POST,PUT,DELETE的区别