群赛 round#8 解题报告一

赛制: OI 难度: noip

T1 交换!交换!(swop)

【问题描述】
ljm喜欢交换物品,他觉得这样可以与更多人分享好的事物。
有一天,lzx给了ljm n本书,这n本书的有益程度分别是a[i],排成一排。然后lzx告诉他:我可以给你k次机会,你最多可以交换其中k对书的位置,然后在现在的排列中拿走其中连续的一段。
ljm是一个正能量的人,他想使得自己拿走的这一段书有益程度加起来尽量大,所以他决定写一个程序来计算。
【输入格式】
第一行n,k。
第二行n个数字,分别是a[i]。(-1000<=a[i]<=1000)
【输出格式】
一个数字,表示ljm最终拿走的这段书有益程度之和。
【输入样例】
10 2
10 -1 2 2 2 2 2 2 -1 10
【输出样例】
32
【数据范围与约定】
对于100%的数据,n<=200,k<=10。
这个题比较简单,就是枚举取到的区间,然后找出区间内前k小的,与区间外前k大的交换,把此时区间内的值加起来,更新ans即可。复杂度为O(n^3)。
代码如下:

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<limits.h>
#define ll long long
using namespace std;
int k,n,a[300],dp[300][300][15],ans=INT_MIN;
void solve(int l,int r)
{int sum=0;for(int i=l;i<=r;i++) sum+=a[i];ans=max(sum,ans);priority_queue<int> qx;priority_queue<int> qd;for(int i=l;i<=r;i++) qx.push(-a[i]);for(int i=1;i<l;i++) qd.push(a[i]);for(int i=r+1;i<=n;i++) qd.push(a[i]);for(int i=1;i<=k;i++){if(qx.size()==0 || qd.size()==0) break;sum+=qx.top()+qd.top();qx.pop();qd.pop();ans=max(ans,sum);}
}
int main()
{freopen("swop.in","r",stdin);freopen("swop.out","w",stdout);scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=n;i++)for(int j=i;j<=n;j++) solve(i,j);printf("%d\n",ans);}

T2 冉文的烦恼(ranwen)

【问题描述】
冉文是个粗心的人,经常不小心把垃圾丢到地上。实在没办法,只好派了m个学生,去捡冉文走过路上的垃圾。
假设冉文走过的路线是一条直线,每个位置分别是1..n,每个位置上垃圾的个数是ai。所有学生起始位置都在0,每秒钟,他们有两种选择:
1.向右走一步。
2.捡起一个地上的垃圾。
现在我们的问题是:要捡起冉文的所有垃圾,最少需要多少秒?
【输入格式】
第一行输入两个正整数n,m,如题目所述。
第二行输入n个非负整数ai,代表每个位置的垃圾个数。ai<=10^9
【输出格式】
一个数字,表示最少的时间。
【输入样例】
3 2
1 0 2
【输出样例】
5
解释:第一个学生走到3,然后捡2个垃圾,共花费时间5,第二个学生走到1,捡1个垃圾,共花费时间2。
【数据范围与约定】
对于30%的数据,m=1。
对于另30%的数据,m=2,垃圾总个数<=21。
对于100%的数据,n,m<=100000
这个题前30%可以直接模拟,另30%用2^21表示2人分别捡的垃圾再模拟。对于100%的数据,二分时间,推出所有学生能走到的最远距离,倒回来捡垃圾,看能否在二分的时间内完成即可。注意各种数字不要开的太小,会WA。
代码如下:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
ll n,m,a[100005];
bool can(ll lim)
{ll now=lim,cnt=1,k=0;for(ll i=1;i<=n;i++){now--;if(now>=a[i]) now-=a[i];else{k=a[i]-now;now=0;}if(i==n&&k<=0) break;if(now==0){cnt++;now=lim-i-k;}while(now<0){cnt++;now+=lim-i;if(lim-i<=0) return 0;}k=0;}if(cnt<=m) return 1;return 0;
}
int main()
{freopen("ranwen.in","r",stdin);freopen("ranwen.out","w",stdout);scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);for(ll i=n;i>=1;i--){if(a[i]==0) n--;else break;}ll l=0,r=1e14*n;while(l<r-1){ll mid=(l+r)/2;if(can(mid)==1) r=mid;else l=mid;}cout<<r<<endl; } 

T3 送分题(easy)

【问题描述】
每个人都会枚举,所以给大家一个送分题。
区间[L,R]内有多少个数字K满足:
K各个非0位都能被K整除?
例如,250的非0位是2,5,250/2=125,250/5=50。
【输入格式】
一行,两个正整数L,R。
【输出格式】
一个数字,表示答案的个数。
【输入样例】
12 15
【输出样例】
2
【数据范围与约定】
对于30%的数据,L,R<=10^5。
对于60%的数据,L,R<=9*10^9。
对于100%的数据,L,R<=10^18。
并不能听信题面……
此题30分做法确实是枚举,60分做法在30分基础上分段打表。对于满分做法,从题面上可以很容易的看出这是一道数位DP。基本思路是用:dp[len][mod][lcm]表示len的长度中,此数为mod,各数位的最小公倍数为lcm的数的个数来进行搜索。但需要进行内存优化:
第二维大小可以从1e18降到2520,方法是%2520.现在的dp数组的内存是18*2520*2520,还是很大。然后再考虑:可以发现某一个数的各个数位的数的最小公倍数最大是2520,而且只能是2520的公约数。而2520的公约数有不超过50个。所以第三维只要用[50]的空间,方法是离散化。‘
代码如下:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
ll dp[25][2525][50],x,y;
int shu[25],hash[2525];
int _lcm(int a,int b)
{return a*b/__gcd(a,b);
}
ll dfs(int pos,int mod,int lcm,bool lim)
{ll ans=0;if(pos<=0) return mod%lcm==0;if(!lim && dp[pos][mod][hash[lcm]]!=-1) return dp[pos][mod][hash[lcm]];int end=0;if(lim) end=shu[pos];else end=9;for(int i=0;i<=end;i++){ans+=dfs(pos-1,(mod*10+i)%2520,i?_lcm(lcm,i):lcm,lim&(i==end));}if(!lim) dp[pos][mod][hash[lcm]]=ans;return ans;
}ll calc(ll a)
{if(a<0) return 0;int len=0;while(a>0){shu[++len]=a%10;a/=10;}ll ans=dfs(len,0,1,1);return ans;
}
int main()
{freopen("easy.in","r",stdin);freopen("easy.out","w",stdout);memset(dp,-1,sizeof(dp));int id=0;for(int i=1;i*i<=2520;i++){if(2520%i==0){hash[i]=id++;if(i*i!=2520) hash[2520/i]=id++;}}scanf("%lld%lld",&x,&y); printf("%lld\n",calc(y)-calc(x-1));
}

群赛 round#8 解题报告一 (swop,ranwen,easy)相关推荐

  1. BestCoder Round #39 解题报告

    现场只做出前三题w 不过不管怎样这既是第一次认真打BC 又是第一次体验用在线编译器调代码 订正最后一题花了今天一整个下午(呜呜 收获还是比较大的^_^ Delete wld有n个数(a1,a2,... ...

  2. Codeforces Round #700 (Div. 2)A~D2解题报告

    Codeforces Round #700 (Div. 2)A~D2解题报告 A Yet Another String Game 原题链接 http://codeforces.com/contest/ ...

  3. 20221126测试赛解题报告

    20221126测试赛解题报告 1.孤独照片 [USACO21DEC] Lonely Photo B 题目描述 Farmer John 最近购入了 NNN 头新的奶牛(3≤N≤5×1053 \le N ...

  4. 解题报告(一)D、(CROC 2016 - Final Round C)Binary Table(矩阵 + 状态压缩 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  5. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  6. Codeforces Round #693 (Div. 3)A~G解题报告

    Codeforces Round #693 (Div. 3)A~G解题报告 A Cards for Friends 原题信息 http://codeforces.com/contest/1472/pr ...

  7. Codeforces Round #697 (Div. 3)A~G解题报告

    Codeforces Round #697 (Div. 3)A~G解题报告 题 A Odd Divisor 题目介绍 解题思路 乍一想本题,感觉有点迷迷糊糊,但是证难则反,直接考虑没有奇数因子的情况, ...

  8. Codeforces Round #698 (Div. 2) A-E解题报告与解法证明

    Codeforces Round #698 (Div. 2) A-E解题报告与解法证明 题目解法总体概括 A Nezzar and Colorful Balls #include <bits/s ...

  9. 山东科技大学第二届ACM校赛解题报告

    这次校赛的目的,是为了省赛测试各种程序是否有问题. 热身赛的逗比题有点打击我,感觉正式赛应该不会出这种问题.开始的时候直接上了A题,然后大概是第六,前面好多友情队,正式队排名第二. 然后读了读B题,稍 ...

最新文章

  1. bat脚本如何自动输入y_Linux系统如何设置开机自动运行脚本?
  2. oracle列字符可以增加长度,ORACLE字符列长度语义
  3. vector基础操作
  4. 64 oracle client,64bit oracle and oracle client.
  5. kibana操作elasticsearch:修改数据
  6. tomcat 6.0 部署报错信息
  7. [bzoj4625][BeiJing2016]水晶
  8. android 字符串的拆分
  9. 净水器怎么放_家中安装净水器后,水却更脏了!这几个常识性问题你不得不知道...
  10. 如何防止token被拦截_Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等
  11. C++:02---命名空间
  12. 自动化构建之bower
  13. 反编译那些事儿(六)—所编译得.class文件带有$符号
  14. 神经网络在科研中的应用,基于神经网络的论文
  15. 003 Nginx虚拟主机配置
  16. 三维尺寸链计算和公差分析软件-DTAS-功能
  17. dataframe读取以文本形式储存的excel中的数字
  18. java微信小程序支付-回调(Jsapi-APIv3)
  19. フェルミナ / 风拳
  20. One Note 插件NoteHighlight2016安装

热门文章

  1. 【附源码】计算机毕业设计SSM闲置物品交易平台
  2. 【教程】FISCO-BCOS一条龙配置go-sdk控制台搭建并启动
  3. PyCharm软件破解使用方法
  4. Dw实现并排显示窗口
  5. 调研分析-全球与中国变频控制器市场现状及未来发展趋势
  6. 【MySQL数据库】MySQL的卸载
  7. 百度地图api html信息窗口,百度地图API实战
  8. 【mcuclub】声光报警
  9. 服务计算——Vmware搭建私有云桌面
  10. 互联网晚报 |10/25 星期二| 腾讯回应中国移动入股传闻;国内汽柴油价格每吨分别提高185元和175元;比亚迪回应特斯拉降价...