EOJ Monthly 2019.2 题解(B、D、F)
EOJ Monthly 2019.2 题解(B、D、F)
官方题解:https://acm.ecnu.edu.cn/blog/entry/320/
单测试点时限: 2.0 秒
内存限制: 1024 MB
“我把房门上锁,并非为了不让她进去,而是为了防止自己逃到她身边”。
她又被数学难住了。QQ 小方当然是不会对女生说”不”的。
她的数学题是这样的,她得到了一个十进制大整数,这个大整数只包含 1 - 9 这 9 个数字。
现在,要求选出其中连续的一段数字,把其他未被选中的数字全部变成 0,并且使得变换以后的大整数恰好是 m 的倍数。
QQ 小方为了表现自己的能力,所以一口答应给她写出在所有可能的数里面最小的一个。
但是她的问题太多了,她对于这一个大整数,需要对于 q 个不尽相同的 m 分别给出答案。
但是 QQ 小方自己不会。只能来求助你了,你能帮他解答吗?
输入
第一行包含一个大整数,这个整数的位数为 n (1≤n≤106)。
第二行一个整数 q (1≤q≤500) 代表询问次数。
对于每一个询问,包含一行一个整数,表示第 i 次询问的 mi (1≤mi≤5×107)。
保证 ≤5×107 。
输出
对于每一个询问输出两个整数 l,r 表示保留第 l 到第 r 位。保证一定有解。
样例
1249
4
7
3
2
83
3 4
4 4
3 3
2 4
提示
对于样例:
1249 这个数中,可选出的最小的7的倍数是49,最小的3的倍数是9,2的倍数是40,83的倍数是249。
题解:
对于该题,很明显可以想到对于所有的可能的解一定可以写成:ai - aj 的形式,设 ai 是从第 i 位到末位代表的整数。
n是一个大整数,显然ai 不能完全表示具体的数,而若ai - aj ≡0(mod m)可以得出ai % m = aj % m,而如何让这个答案ai - aj 最小呢?就要使得ai 越小,aj 越大就好,就是i越靠近后面,j是从末尾到i的所有a[j]中最靠近i的,显然a[j]要从最后面一位+1开始枚举,因为比如说答案是最后一位,那么i=len(整个长度),j=len+1,所以i要从len开始往前枚举,j再从len+1枚举到i+1。
这就是大概的思路,然后,如果像上述的方法去做,时间就变成了预处理len次,枚举len2 ,时间就变成了o(len+len2),len就是n,n最多为1e6,显然会超时。
其实对于mod m,根据鸽巢原理(抽屉原理),你最多枚举m+1次我就能找到两个相同的a[i]和a[j],然后找a[i]和a[j] 时,我们可以这样,先从a[len+1]开始往前枚举,如果枚举到某个a[i],发现这个数已经出现过了,那么这就是我们想要的答案,这样你在找可以边找处理a[i],就可以边找答案,最多处理m+1次,这样就不会超时。具体看代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
const int maxm=5e7+;
int n,m,t;
char s[maxn];
int a[maxn];
struct node{
int num;
int have;
}vis[maxm];
int main(){
int len=;
char c;
while(c=getchar()){
if(c>='' && c<='') s[len++]=c;
else{
s[len]='\0';
break;
}
}
len--;
scanf("%d",&t);
while(t--){
scanf("%d",&m);
for(int i=; i<=m; i++){
vis[i].num=;
vis[i].have=;
}
a[len+]=;
vis[a[len+]].num=len+;
vis[a[len+]].have=;
int tmp=;
for(int i=len; i>&&i>=len-m; i--){
a[i]=((s[i]-'')*tmp+a[i+])%m;
tmp=(tmp*)%m;
if(vis[a[i]].have==){
vis[a[i]].num=i;
vis[a[i]].have=;
}
else{
printf("%d %d\n",i,vis[a[i]].num-);
break;
}
}
}
}
单测试点时限: 2.0 秒
内存限制: 256 MB
“他觉得一个人奋斗更轻松自在。跟没有干劲的人在一起厮混,只会徒增压力。”
QQ 小方决定一个人研究研究进制转换。
很快,QQ 小方就遇到问题了。他现在想知道在十进制范围 [l,r] 内有多少整数满足在 k 进制下末尾恰好有 m 个 0。
比如在十进制下的 24 在二进制下是 11000,我们称十进制下的 24 在二进制下末尾恰好有 3 个 0。
QQ 小方一筹莫展,你能帮他解决问题吗?
输入
第一行包含一个整数 T (1≤T≤105) 表示数据组数。
对于每组数据包含一行,四个整数 l,r,k,m ( 1≤l≤r≤1018, 2≤k,m≤100),含义如题目所述。
输出
对于每组数据输出一行,包含一个整数,表示答案。
样例
2
1 10 2 3
1 100 2 3
1
6
提示
例如,在 100 进制下,末位是 90 的数不算作有末尾 0。
#include<bits/stdc++.h>
using namespace std;
typedef long long llx;
llx t,l,r,k,m;
int main(){
cin>>t;
while(t--){
cin>>l>>r>>k>>m;
l--;
llx ll=l,rr=r;
for(llx i=; i<m; i++){
rr=(llx)(rr/k);
ll=(llx)(ll/k);
}
llx rrr=(llx)(rr/k);
llx lll=(llx)(ll/k);
cout<<rr-ll-rrr+lll<<endl;
}
}
单测试点时限: 2.0 秒
内存限制: 256 MB
“放弃不难,但坚持一定很酷。”
QQ 小方已经在体育馆苦练一天射箭了,但他还在坚持。
QQ 小方每天都要在朋友圈晒自己的训练记录。他一共进行了 n 次射箭,成绩分别是 x1,x2,⋯,xn。为了表现自己的发挥十分稳定,QQ 小方决定选出其中的 m 次成绩,使得他们的方差是所有可以选择的方案中最小的。
对于 m 个元素组成的数列 a1,a2,⋯,am,我们知道他们的方差 σ2=(a1−a¯)2+(a2−a¯)2+⋯+(am−a¯)2m ,其中 a¯=a1+a2+⋯+amm。
但是这个问题对 QQ 小方来说太难了,你需要去帮助 QQ 小方。
为了方便,现在你需要输出这个最小的 σ2 乘以 m2 以后的结果。
输入
输入一行包含两个正整数 n (1≤n≤106) 和 m (1≤m≤n)。接下来一行包含 n 个整数 x1,x2,⋯,xn (1≤xi≤103)。
输出
输出一行包含一个整数,表示答案。为了方便,我们需要输出最小的 σ2 乘以 m2 以后的结果。
样例
5 3
1 2 3 4 5
6
题解:
这题就是公式的变形
(=_=)直接看上面的题解吧,注意用long long。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e6+;
ll a[maxn],sum1[maxn],sum2[maxn];
int main(){
ll n,m;
scanf("%lld %lld",&n,&m);
for(ll i=; i<=n; i++) scanf("%lld",&a[i]);
sort(a+,a+n+);
for(ll i=; i<=n; i++){
sum1[i]=sum1[i-]+a[i];
sum2[i]=sum2[i-]+a[i]*a[i];
}
ll minn=LONG_LONG_MAX;
for(ll i=m; i<=n; i++){
ll tmp=(sum2[i]-sum2[i-m])*m-(sum1[i]-sum1[i-m])*(sum1[i]-sum1[i-m]);
minn=min(minn,tmp);
}
printf("%lld\n",minn);
}
EOJ Monthly 2019.2 题解(B、D、F)的更多相关文章
- EOJ Monthly 2019.2 (based on February Selection) F.方差
题目链接: https://acm.ecnu.edu.cn/contest/140/problem/F/ 题目: 思路: 因为方差是用来评估数据的离散程度的,因此最优的m个数一定是排序后连续的,所以我 ...
- EOJ Monthly 2019.2
题解 A 回收卫星 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/s ...
- EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)
传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...
- eoj monthly 2019.11
原题 T1 纸条 题目大意: 给出一个长度为n的字符串,其中m位未知,对于每一位未知的字母,有k个备选字母,最终答案为备选字母按字典序排序后的第x个. 题解: 签到题-- 按照题目意思直接写就可以了. ...
- EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)
题意: 一张由 n 个点,m 条边构成的有向无环图.每个点有点权 Ai.QQ 小方想知道所有起点为 1 ,终点为 n 的路径中最大的中位数是多少. 一条路径的中位数指的是:一条路径有 n 个点,将这 ...
- EOJ Monthly 2019.2 (based on February Selection) D.进制转换
题目链接: https://acm.ecnu.edu.cn/contest/140/problem/D/ 题目: 思路: 我们知道一个数在某一个进制k下末尾零的个数x就是这个数整除kx,这题要求刚好末 ...
- EOJ Monthly 2019.2 (based on February Selection) D 进制转换 【数学 进制转换】
任意门:https://acm.ecnu.edu.cn/contest/140/problem/D/ D. 进制转换 单测试点时限: 2.0 秒 内存限制: 256 MB “他觉得一个人奋斗更轻松自在 ...
- EOJ Monthly 2019.1 唐纳德先生与这真的是签到题吗 【数学+暴力+multiset】
传送门:https://acm.ecnu.edu.cn/contest/126/ C. 唐纳德先生与这真的是签到题吗 单测试点时限: 6.0 秒 内存限制: 1024 MB 唐纳德先生在出月赛的过程中 ...
- EOJ Monthly 2019.3 A
A. 钝角三角形 单点时限: 3.0 sec 内存限制: 512 MB QQ 小方以前不会判断钝角三角形,现在他会了,所以他急切的想教会你. 如果三角形的三边长分别为 a, b, c (a≤b≤c), ...
随机推荐
- 2018-2019-2 网络对抗技术 20165303 Exp4 恶意代码分析
实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systr ...
- js统一设置富文本中的图片宽度
var txt = layedit.getContent(ieditor);//获取编辑器内的文本var regex = new RegExp('<img', 'gi');txt = txt.r ...
- XV Open Cup named after E.V. Pankratiev. GP of Central Europe (AMPPZ-2014)--B.Petrol
多源最短路+并查集 #include <bits/stdc++.h> using namespace std; #define rep(i, j, k) for (int i = int( ...
- 缓存之Memcache
Memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. ...
- webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?
资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...
- PowerDesigner数据库设计导出到Excel
在PowerDesigner 中 ctrl+shift+x 弹出执行脚本界面,输入如下代码就会生成 Excel Option Explicit Dim rowsNum rowsNum = '--- ...
- swoole框架和其所涉及的协议
网络知识基础 OSI协议 :应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 tcp通信 TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道(三次握手.四次挥手). ...
- SQL运行优化收藏
如何让你的SQL运行得更快(转贴) ---- 人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境 ...
- IPhone手机常用的一些连
1.查看固件可下载链接. ipsw.me 2.查看手机型号(是global还是GSM). https://ipsw.me/device-finder 3.系统降级链接. https://jingyan ...
- [cf contest697] D - Puzzles
[cf contest697] D - Puzzles time limit per test 1 second memory limit per test 256 megabytes input s ...