本来没有写博客的打算,可是看完了题解感觉这三道题这么水,我却只做出来一道,实在不应该,还是写点东西吧……

A.sum

问题描述
给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出NO
输入描述
输入文件的第一行有一个正整数T(1≤T≤101\leq T \leq 101≤T≤10),表示数据组数。

接下去有T组数据,每组数据的第一行有两个正整数n,m (1≤n≤100000 1\leq n\leq 1000001≤n≤100000 ,1≤m≤5000 1\leq m\leq5000 1≤m≤5000).

第二行有n个正整数x (1≤x≤1001\leq x\leq 1001≤x≤100)表示这个数列。
输出描述
输出T行,每行一个YES或NO。
输入样例
2
3 3
1 2 3
5 7
6 6 6 6 6
输出样例
YES
NO 分析:
就做出来这一道题-_-||
思路很清晰 输入一个数加一个数进sum 然后取模 如果有两个sum%m相等 那么这两个数之间的序列和%m一定==0 当然 如果有序列和%m==0就不用算差了……
 #include<stdio.h>
#include<string.h>
#define M(a,b) memset(a,b,sizeof(a))
int num[];
int sum[];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m;
scanf("%d%d",&n,&m);
M(num,);
int a;
for(int i=;i<n;i++){
scanf("%d",&a);
sum[i]=(sum[i-]+a)%m;
num[sum[i]]++;
}
if(n>=m||num[]!=){ //n>=m是题解抽屉原理的优化
puts("YES");
continue;
}
bool ok=;
for(int i=;i<m;i++)
if(num[i]>) ok=;
printf("%s\n",ok?"YES":"NO");
}
return ;
}

B.domino
问题描述
小白在玩一个游戏。桌子上有n张多米诺骨牌排成一列。它有k次机会,每次可以选一个还没有倒的骨牌,向左或者向右推倒。每个骨
牌倒下的时候,若碰到了未倒下的骨牌,可以把它推倒。小白现在可以随意设置骨牌的高度,但是骨牌高度为整数,且至少为1,并且
小白希望在能够推倒所有骨牌的前提下,使所有骨牌高度的和最小。
输入描述
第一行输入一个整数T(1≤T≤101\leq T \leq 101≤T≤10)
每组数据有两行
第一行有两个整数n和k,分别表示骨牌张数和机会次数。(2≤k,n≤1000002\leq k,n\leq 1000002≤k,n≤100000)
第二行有n-1个整数,分别表示相邻骨牌的距离d,1≤d≤1000001\leq d \leq 1000001≤d≤100000
输出描述
对于每组数据,输出一行,最小的高度和
输入样例
1
4 2
2 3 4
输出样例
9

分析:
一开始把这道题想复杂了 打了好长好长的代码 看了题解感觉真是想多了……
其实就是先把牌的高度存下来 然后贪心 即排序后只取前n-k个值
因为每张牌至少高度是1 所以初始化ans=n 就相当于每张牌一开始都是1 只要往上加间距就好了
 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
int card[];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,k;
M(card,);
scanf("%d%d",&n,&k);
for(int i=;i<n-;i++)
scanf("%d",&card[i]);
if(k>=n){
printf("%d\n",n);
continue;
}
sort(card,card+n);
long long ans=n;
for(int i=;i<=n-k;i++)
ans+=card[i];
printf("%I64d\n",ans);
}
return ;
}

c.abs

问题描述
给定一个数x,求正整数y≥2y\geq 2y≥2,使得满足以下条件:
1.y-x的绝对值最小
2.y的质因数分解式中每个质因数均恰好出现2次。
输入描述
第一行输入一个整数T(1≤T≤501\leq T\leq 501≤T≤50)
每组数据有一行,一个整数x(1≤x≤10181\leq x\leq {10}^{18}1≤x≤10​18​​)
输出描述
对于每组数据,输出一行y-x的最小绝对值
输入样例
5
1112
4290
8716
9957
9095
输出样例
23
65
67
244
70 分析:
这道题的数据范围是最唬人的了 1e18 解法却是暴力……
因为素数定理(我也是百度才知道)可以将时间复杂度降到允许暴力的范围内……
 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
long long ans,y;
bool solve(long long a){
long long aa=a;
if(a<) return false;
for(long long i=;i*i<=aa;i++){
if(aa%i==){
if(aa%(i*i)==) //i出现不止一次
return false;
aa/=i;
}
}
ans=min(ans,abs(y-a*a)); //判断solve(x+i)和solve(x-i)一大一小
return true;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%I64d",&y);
long long x=(long long)(sqrt(y)+0.5);//这0.5的精度也会WA
long long i=;
ans=;
bool ok=false;
if(solve(x)){
printf("%I64d\n",abs(y-x*x));
continue;
}
while(true&&!ok){
if(solve(x+i)) ok=true;
if(solve(x-i)) ok=true;
i++;
}
printf("%I64d\n",ans);
}
return ;
}
												

BestCoder Round #85 A B C的更多相关文章

  1. BestCoder Round #85(ZOJ1569尚未验证)

    A题 子序列和啊,就要想到前缀和的差.这个转换一定要!记着!那么i到j的一段子序列和Sij%m ==  0就等价于(Sj-Si-1)%m == 0 了,那么什么意思呢?就是如果有两段前缀和%m的模是一 ...

  2. BestCoder Round #85 hdu5778 abs(素数筛+暴力)

    abs 题意: 问题描述 给定一个数x,求正整数y,使得满足以下条件: 1.y-x的绝对值最小 2.y的质因数分解式中每个质因数均恰好出现2次. 输入描述 第一行输入一个整数T 每组数据有一行,一个整 ...

  3. BestCoder Round #85 hdu5777 domino

    domino 题意: 问题描述 小白在玩一个游戏.桌子上有n张多米诺骨牌排成一列.它有k次机会,每次可以选一个还没有倒的骨牌,向左或者向右推倒.每个骨 牌倒下的时候,若碰到了未倒下的骨牌,可以把它推倒 ...

  4. BestCoder Round #85 hdu5776 sum

    sum 题意: 问题描述 给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出NO 输入描述 输入文件的第一行有一个正整数T,表示数据组数. 接下去有T组数据,每组数据的第一行有两个 ...

  5. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化

    分析(官方题解): 一点感想: 首先上面那个等式成立,然后就是求枚举gcd算贡献就好了,枚举gcd当时赛场上写了一发O(nlogn)的反演,写完过了样例,想交发现结束了 吐槽自己手速慢,但是发了题解后 ...

  6. HDU5779 Tower Defence (BestCoder Round #85 D) 计数dp

    分析(官方题解): 一点感想:(这个题是看题解并不是特别会转移,当然写完之后看起来题解说得很清晰,主要是人太弱 这个题是参考faebdc神的代码写的,说句题外话,很荣幸高中和faebdc巨一个省,虽然 ...

  7. HDU 5778 abs (BestCoder Round #85 C)素数筛+暴力

    分析:y是一个无平方因子数的平方,所以可以从sqrt(x)向上向下枚举找到第一个无平方因子比较大小 大家可能觉得这样找过去暴力,但实际上无平方因子的分布式非常密集的,相关题目,可以参考 CDOJ:无平 ...

  8. HDU5777 domino (BestCoder Round #85 B) 思路题+排序

    分析:最终的结果肯定会分成若干个区间独立,这些若干个区间肯定是独立的(而且肯定是一边倒,左右都一样) 这样想的话,就是如何把这n-1个值分成 k份,使得和最小,那么就是简单的排序,去掉前k大的(注意l ...

  9. HDU 5776 sum (BestCoder Round #85 A) 简单前缀判断+水题

    分析:就是判断简单的前缀有没有相同,注意下自身是m的倍数,以及vis[0]=true; #include <cstdio> #include <cstdlib> #includ ...

  10. BestCoder Round #85

    sum Accepts: 640 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...

随机推荐

  1. Python操作redis、memcache和ORM框架_Day13

    一.memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  2. CentOS 手动增加、删除swap区

    SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...

  3. 在Linux中设置自启动服务或程序

    三种方法: 1.基于linux的system V机制,其中有个运行级别和链接软连接指向服务脚本的机制. 服务脚本一般处于/etc/init.d/目录下, 而运行级别制定的默认执行脚本在/etc/rc. ...

  4. lda 主题模型--TOPIC MODEL--Gibbslda++结果分析

    在之前的博客中已经详细介绍了如何用Gibbs做LDA抽样.(http://www.cnblogs.com/nlp-yekai/p/3711384.html) 这里,我们讨论一下实验结果: 结果文件包括 ...

  5. 《Intel汇编第5版》 Mov指令

    一.Mov用于数据传送,用法如下: 二.当传送的数据和目标数据位宽不一致的时候,需要使用MOVZX.MOVSX扩展.MOVZX使用0填充高位,MOVSX使用源操作数最高位填充 下面是汇编代码演示: I ...

  6. MVC网站后台分离

    1.新建一个项目TestAdmin项目类型随便选一个,待会删掉,因为这里我只需要解决方案名称  [项目存放于F盘    F:\TestAdmin] 2.新建一个 ZGJ.Web 的前台MVC项目,将开 ...

  7. 查找页面中最大的z-index 的值

    var divs = document.getElementsByTagName("div");for(var i=0, max=0; i<divs.length; i++) ...

  8. Servlet之保存用户偏好设置简单功能的实现

    写在前面: 先来陈述一下为什么会有这样一个需求和这篇博文. 这是公司的一个项目,我们负责前端,后台服务由其他公司负责.该系统有一个系统偏好设置模块,用户可以设置系统的背景图片等系统样式,因为这是一个比 ...

  9. sql server 查询出的结果集,拼接某一列赋值给一个变量

    现有表Area 如下: SELECT [Areaid] ,[Areaname] ,[Areapid] FROM [Northwind].[dbo].[Area] 查询结果如下图: 需求:用 “-“ ” ...

  10. 雄冠条码PV系统-2016-05-17-收获

    Q1:微信浏览器 input获取焦点时,页面宽度变大 解决方法: HTML <header> 中添加<meta name="viewport" content=& ...