51nod 几道题
1001 数组中和等于K的数对
基准时间限制:1 秒 空间限制:131072 KB
分值: 5 难度:1级算法题
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,
找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。
Input
第1行:用空格隔开的2个数,K N,N为A数组的长度。(2 <= N <= 50000,-10^9 <= K <= 10^9)
第2 - N + 1行:A数组的N个元素。(-10^9 <= A[i] <= 10^9)
Output
第1 - M行:每行2个数,要求较小的数在前面,并且这M个数对按照较小的数升序排列。
如果不存在任何一组解则输出:No Solution。
Input示例
8 9
-1
6
5
3
4
2
9
0
8
Output示例
-1 9
0 8
2 6
3 5
#include<algorithm>
#include<iostream>
#include<cstdiO>
#include<set>
using namespace std;
int n,k;
int s[100005];
set<int>str;
int main(){
cin>>k>>n;
int ans=0,num;
for(int i=1;i<=n;++i){
scanf("%d",&s[i]);
str.insert(s[i]);
}
sort(s+1,s+n+1);
for(int i=1;i<=n;++i){
if(k-s[i]<s[i])break;
if(k-s[i]==s[i])continue;
if(str.count(k-s[i])){
ans++;
cout<<s[i]<<' '<<k-s[i]<<endl;
}
}
if(!ans)cout<<"No Solution";
return 0;
}
比较正常的做法是\(O(n^2)\)枚举
但是会被卡
所以可以二分
因为可以与一个数配对的数有且只有一个
1002 数塔取数问题
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注
一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。
每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。
5
8 4
3 6 9
7 2 9 5
例子中的最优方案是:5 + 8 + 6 + 9 = 28
Input
第1行:N,N为数塔的高度。(2 <= N <= 500)
第2 - N + 1行:每行包括1层数塔的数字,第2行1个数,第3行2个数......第k+1行k个数。数与数之间用空格分隔(0 <= A[i] <= 10^5) 。
Output
输出最大值
Input示例
4
5
8 4
3 6 9
7 2 9 5
Output示例
28
#include<iostream>
#include<cstdio>
#define N 505
using namespace std;
int n;
int s[N][N];
int f[N][N];
int main(){
cin>>n;
for(int i=1;i<=n;++i)
for(int j=1;j<=i;++j)
cin>>s[i][j];
for(int i=1;i<=n;++i)
for(int j=1;j<=i;++j)
f[i][j]=max(f[i-1][j],f[i-1][j-1])+s[i][j];
int ans=0;
for(int i=1;i<=n;++i)
ans=max(ans,f[n][i]);
cout<<ans;
return 0;
}
水动规
1003 阶乘后面0的数量
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注
n的阶乘后面有多少个0?
6的阶乘 = 12345*6 = 720,720后面有1个0。
Input
一个数N(1 <= N <= 10^9)
Output
输出0的数量
Input示例
5
Output示例
1
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n;
cin>>n;
int ans=0;
int sn=n;
while(n>0){
ans+=n/2;
n/=2;
}
int ans1=0;
while(sn>0){
ans1+=sn/5;
sn/=5;
}
cout<<min(ans,ans1);
return 0;
}
找出作为因子的5的数量和2的数量
取min就好
但是不能直接求10的数量
1004 n^n的末位数字
题目来源: Author Ignatius.L (Hdu 1061)
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注
给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。
Input
一个数N(1 <= N <= 10^9)
Output
输出N^N的末位数字
Input示例
13
Output示例
3
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int mmm[10][5]={
{0,0,0,0},{1,1,1,1},
{6,2,4,8},{1,3,9,7},
{6,4,6,4},{5,5,5,5},
{6,6,6,6},{1,7,9,3},
{6,8,4,2},{1,9,1,9}
};
int main(){
cin>>n;
cout<<mmm[n%10][n%4];
return 0;
}
发现
1009 数字1的数量
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 取消关注
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
Input
输入N(1 <= N <= 10^9)
Output
输出包含1的个数
Input示例
12
Output示例
5
#include<cstdio>
using namespace std;
int main(){
int n;
int t,tn;
long long ans=0;
int mul=1;
scanf("%d",&n);
tn=n;
while(tn){
t=tn%10;
if(t==0)
ans+=n/(mul*10)*mul;
else if(t==1){
ans+=n/(mul*10)*mul;
ans+=(n%mul)+1;
}
else
ans+=(n/(mul*10)+1)*mul;
mul*=10,tn/=10;
}
printf ("%lld\n",ans);
return 0;
}
51nod 几道题的更多相关文章
- 【51Nod 1616】【算法马拉松 19B】最小集合
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...
- 51nod百度之星2016练习赛
今天看了看51nod发现有这样一个练习赛,就做了做.因为实力太弱想不出E题,各位神犇勿D. (5.26UPD:E题想粗来了) A 区间交 不难发现若干线段[li,ri]的交就是[max(li),min ...
- 51nod 最近刷题 简要题解
51nod 1564 由于数据是随机的,可以证明,对于每一个数,向左或右找比它小的数,长度是logn级别的 考虑枚举最大值 注意,对于每一个最大值,如果直接用2个循环枚举左右端点的话,理论是lognl ...
- 51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛
OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了 神奇的故事就开始了: 晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就 ...
- 51Nod 有限背包计数问题 题解报告
首先这道题理论上是可以做到O(nlogn)的,因为OEIS上有一个明显可以用多项式乘法加速的式子 但是由于模数不是很兹磁,所以导致nlogn很难写 在这里说一下O(n*sqrt(n))的做法 首先我们 ...
- 51nod水题记
妈呀51nod已经刷不动了又开始跟bzoj一样总是得看题解了...那么发一下总结吧... 1051:最大子矩阵 #include<cstdio> #include<cstring&g ...
- 51Nod 1091 线段的重叠(贪心+区间相关,板子题)
1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...
- 51nod 1617 奇偶数组
传送门 回来看一眼51nod,发现自己掉到rank4了,赶紧切道题回rank3. 一眼不会做,这种东西应该慢慢找规律吧……然后看到数据范围其实比较小,应该是单次log的,那是不是可以分治啊. #inc ...
- 51Nod 1815 调查任务
发现绍一的人很喜欢做51nod,不得不说这还是一个很全能的良心OJ 但是做的这道题就一点都不良心了,简直是毒瘤,调了一早上 首先我们考虑让一条路径的\(a_x\ mod\ a_y\)的值最大,我们简单 ...
随机推荐
- 学习bash——数据流重定向
一.概述 1. 数据流 定义:以规定顺序被读取一次的数据序列. 分类:标准输入(stdin).标准输出(stdout)和标准错误输出(stderr). 标准输出:指的是命令执行所回传的正确信息. 标准 ...
- 数据结构7——DP优化
斜率优化/单调队列优化/四边形优化
- Linux yum安装MySQL5.7,及远程连接mysql(亲测有效!)
一.安装配置MySQL的yum源 # 安装MySQL的yum源,下面是RHEL6系列的下载地址 rpm -Uvh http://dev.mysql.com/get/mysql-community-re ...
- Java IO流-File类的使用示例-创建文件夹和文件的正确方法
当创建一个文件时,比如:E:\\test\\test.txt,此时若文件夹test不存在,那么直接创建文件会出错,故首先要判断文件夹是否存在,不存在的话要首先创建文件夹. public class F ...
- iOS-登录发送验证码时60秒倒计时,直接用
__block NSInteger timeout= ; //倒计时时间 KWeakSelf dispatch_queue_t queue = dispatch_get_global_queue(DI ...
- Ext.Net中如何获取组件
我们在编写函数function的时候,常常需要用到页面上的组件.这时候就需要调用组件. 在Ext.net中,调用组件可以用.App.ID.(ID指的是想要调用的组件的ID). 例如: 我写一个函数需要 ...
- javascript知识总结
javascript: 面对对象 函数创建方式: 1.工厂模式 function createPerson(name, age, job){ var o = new Object(); //创建工厂对 ...
- 【EasyNetQ】- 请求回复
EasyNetQ还支持请求/响应消息传递模式.这使得实现客户端/服务器应用程序变得容易,客户端向服务器发出请求,然后服务器处理请求并返回响应.与传统的RPC机制不同,EasyNetQ请求/响应操作没有 ...
- 算法(8)Maximum Product Subarray
题目:在一个数组中找到一个子数组,让子数组的乘积最大,比如[2,3,-2,4]返回6 思路:之前自己想到的思路是对于一个int类型的数组,只要负数的个数是偶数,那么乘积肯定是全局乘就可以了,然后对于负 ...
- [IOI2007 D1T1]Miners 矿工配餐
题目大意:有$2$个煤矿,$n$天.每天给一个煤矿送餐(共有有$3$种餐),价值为它与前面两次送餐(如果有的话)不同的种类数.最大化价值. 题解:看到只有三种餐,考虑状压$DP$.$f_{i,j,k, ...