51nod 1138 【数学-等差数列】】的更多相关文章

思路: 很显然每个连续的序列都是等差数列, 那么我们利用等差数列求和公式. S=(a1+a1+k-1)k/2=(2·a1+k-1)*k/2;a1是首项,k是个数. 枚举k,首项最小为1,k最大,具体不说了,反正大致就是sqrt(2*n); 枚举量还是在平方以内 题外话: 这题就是没有去想等差数列,等差数列公式和求和要熟练,以及变量都是一方影响另一方的思想也要有: #include <bits/stdc++.h> using namespace std; typedef long long LL…
1138 连续整数的和 #include <iostream> #include <cmath> #include <cstdio> using namespace std; int main() { int n; while(cin>>n) { int m = (int)sqrt(n); int sum = 0; for(int i=m*2; i>=2; i--) { if( (2*n+i-i*i)%(2*i)==0 && (2*n+…
1138 连续整数的和  基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2).例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8.如果不能写为若干个连续整数的和,则输出No Solution. Input 输入1个数N(3 <= N <= 10^9). Output 输出连续整数中的第1个数,如果有多个按照递增序排列,如…
F(n) = (n % 1) + (n % 2) + (n % 3) + ...... (n % n).其中%表示Mod,也就是余数. 例如F(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3. 给出n,计算F(n), 由于结果很大,输出Mod 1000000007的结果即可. Input 输入1个数N(2 <= N <= 10^12). Output 输出F(n) Mod 100000…
Description Tweetuzki 特别喜欢等差数列.尤其是公差为 \(1\) 且全为正整数的等差数列. 显然,对于每一个数 \(s\),都能找到一个对应的公差为 \(1\) 且全为正整数的等差数列各项之和为 \(s\).这时,Tweetuzki 想知道,满足这样条件的等差数列,最小的首项是多少. 由于 Tweetuzki 的数学非常差,尤其是因式分解,所以请你告诉他结果. Input 输入仅包含一行一个整数 \(s\) Output 输出一行两个用空格隔开的整数代表首项和末项 Hint…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1639 假如一开始有一根绳子. 那么增加一根的时候,可以插在它的尾部,也可以左端头开始插,或者右端头开始插.但是不能从头部开始插,因为这样和前面的重复了.因为它是环,旋转一下,变成一模一样了. 那么加入有2根了,就可以在第一.二根中间开始插,或者在第二根尾部开始插,也是可以左端头开始插,或者右端头开始插. 所以总方案就是2^(n - 1) * (n - 1)! 那么总方案…
1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0.   Input 一个数N(1 <= N <= 10^9) Output 输出0的数量 Input示例 5 Output示例 1题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1003编程之…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1055 题意: 思路:先固定一个位置,然后从该中心点出发向两边扫,确实很难想到啊... #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<stack> #incl…
[题目]1055 最长等差数列 [题意]给定大小为n的互不不同正整数集合,求最长等差数列的长度.\(n \leq 10000\). [算法]动态规划 两个数之间的差是非常重要的信息,设\(f_{i,j}\)表示以i和j开头的最长等差数列长度,初始化为2,那么: \[f_{i,j}=f_{j,k}+1 \ \ , \ \ |A_i-A_j|=|A_j-A_k|\] 怎么快速找i,j,k?从后往前枚举j,然后双指针i和k向两边移动判断即可. 复杂度\(O(n^2)\). 注意:这题卡时间和空间,f数…
1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ...... (n % n).其中%表示Mod,也就是余数. 例如F(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3. 给出n,计算F(n), 由于结果很大,输出Mod 1000000007的结果…
1035 最长的循环节 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035 Description 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数. 1/6= 0.1(6) 循环节长度为1 1/7= 0.(142857) 循环节长度为6 1/9= 0.(1) 循环节长度为1 Input 输入n(10 <= n <= 10…
题目链接:51nod 1837 砝码称重 小 Q 有 n 个砝码,它们的质量分别为 1 克. 2 克.……. n 克. 他给 i 克的砝码标上了编号 i (i = 1, 2, ..., n),但是编号被人打乱了,即编号为 i 的砝码不一定是 i 克,而是 a_i 克,这里 a 指的是 1 到 n 的一个排列. 他有一杆天平,可以向天平的两侧放任意数量的砝码,通过一次称量得到两侧质量的大小关系,关系只有左侧重.一样重.右侧重三种可能. 他想知道,最坏情况下,他至少需要称量多少次,才能确定其中至少一…
N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不列举) 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8 10 12 14   其中6 8 10 12 14最长,长度为5.     Input第1行:N,N为正整数的数量(3 <= N <= 10000). 第2 - N+1行:N个正整数.(2<= Aii <= 10^9)Output最长等差数列的长度…
https://www.51nod.com/Challenge/Problem.html#!#problemId=1659 随便弄了一下发现公式,然后从cheatsheet抄一抄平方和公式,发现可以提公因式. 提完发现可以放缩估计出n的上界,复杂度可行. 然后是怎么求m. 一开始弄了个假算法,要求每一步都是整数,其实并不是这样. 经过一顿处理,又怕溢出ll这么麻烦. 最后分两步验证233. 保证结果是整数,那么参加加减法的都是整数,参加乘法的,把系数提到外面,然后保证里面是外面系数的倍数,这样刚…
普通算法肯定T了,所以怎么算呢?和矩阵有啥关系呢? 打数学符号太费时,就手写了: 所以求Fib(n)就是求矩阵  |  1  1  |n-1  第一行第一列的元素. |  1  0  | 其实学过线代的同学应该一看就看出来了,然鹅我还没学,所以不得不写几个不必要的等式=.= #include<iostream> #include<cstdio> using namespace std; #define ll long long #define INF 1000000009 ll n…
1055 最长等差数列  基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不列举) 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8 10 12 14 其中6 8 10 12 14最长,长度为5. Input 第1行:N,N为正整数的数量(3 <= N <= 10000).…
题目 戳这里 推导 ∑i=1n∑j=1nlcm(i,j)~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)   ∑i=1n​∑j=1n​lcm(i,j) =∑i=1n∑j=1nijgcd(i,j)=\sum_{i=1}^{n}\sum_{j=1}^{n}\frac{ij}{gcd(i,j)}=∑i=1n​∑j=1n​gcd(i,j)ij​ =∑i=1nd−1∑i=1n∑j=1nij[gcd(i,j)==d]=\sum_{i=1}^{n}d^{-1}\sum_{i=1}…
1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  取消关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不列举) 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8 10 12 14 其中6 8 10 12 14最长,长度为5. Input 第1行:N,N为正整数的数量(3 <= N <= 10000).…
题目链接: B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB  B君要用一个表面积为S的圆锥将白山云包起来.   B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少.   注意圆锥的表面积包括底面和侧面. Input 一行一个整数,表示表面积S.(1 <= S <= 10^9) Output 一行一个实数,表示体积. Input示例 8 Output示例 1.504506 题意: 思路: 找打圆锥体积与表面积的关系,再找出体积的最大值就好了,可以发现当圆锥的底面积PI*…
first try: set<LL> sset; int main() { LL m,n,a,b; while(~scanf("%lld%lld%lld%lld",&m,&n,&a,&b)){ LL tt; ;i<n;i++){ tt=a; ;j<m;j++){ sset.insert((LL)pow((tt++),b)); } b++; } printf("%d\n",sset.size()); } ; }…
Input 第一行给出一个整数T,表示有T组数据(1<=T<=10000). 第2行到T+1,每行给出一个整数R.(0< R <= 10,000,000,000) Output 对于每一个数据,在一行中输出答案的整数部分即可. Input示例 1 1 Output示例 2 分析:半径为r的硬币相交的直线的的条数有2*r和2*r+1,其中2r+1的情形只有一种,硬币和直线相切,这种情况只有一种,而硬币落在桌子上的情形有无数种,这个概率是可以忽略,故概率为0,所以另一种情形的概率是1,…
Output 输出fun(A)的计算结果. Input示例 3 1 4 1 Output示例 4 first try: #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 100010 #define MOD 10 LL arr[N]; LL fun(int n){ LL sum=; ;i<…
Input示例 3 1 2 3 Output示例 1 1 0 #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 510 #define MOD 10 using namespace std; int main() { int n,t,m; scanf("%d",&t)…
解题思路:看到题后,直接想到分成两种情况: ①:a*b >9 这里又分成两种 1. n==1 a*b 直接是一个两位数 求得十位和个位(这里十位和个位不可能相等) 然后如果等于d 则结果=1 2. n>1 直接分析 a*b aa*b aaa*b aaaa*b的结果 6 * 8 = 48  66 * 8 =  528 666 * 8 = 5328 6666 * 8 =53328 ......   * 8 = 5....328 所以可以看出结果 只需求出 个位 十位 百位 和最高位即可 ②:a*b…
题面 传送门 题解 这种颓柿子的题我可能死活做不出来-- 首先\(r=0\)--算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\) 设 \[s_p=\sum_{i=1}^n i^pr^i\] 我们要求的就是\(s_k\) 因为有 \[s_k=\sum_{i=1}^n i^kr^i\] \[rs_k=\sum_{i=2}^{n+1}r^{i}(i-1)^k\] 两个柿子减一减 \[(r-1)s_k=r^{n+1}n^k-r+\sum_{i=2}^nr…
有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:   fun(A)     sum = 0     for i = 1 to A.length         for j = i+1 to A.length             sum = sum + Floor((A[i]+A[j])/(A[i]*A[j]))      return sum   给出数组A,由你来计算fun(A)的结果.例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1]…
思路: 不晓得阿,n%9==0即n数值各个位加起来要%9==0: 如果知道这个,那么%90==0就是末尾多个0就好了,那么后面就是随便搞吧: #include <stdio.h> #include <string.h> #include <iostream> using namespace std; typedef long long LL; const int N=1e3+10; int a[N]; int z[N]; int n; int main() { int…
思路: 2和5能构成0,然后就是看2和5因子组成个数,然而我们知道,1-n中2的因子数肯定>5的,所以我们只要求一下1-n中5的因子个数就好了... #include <stdio.h> #include <string.h> #include <iostream> using namespace std; typedef long long LL; //求1-n有x因子的个数,给出一个n: int main() { int n; int ans=0; scanf…
acm.hdu.edu.cn/showproblem.php?pid=4790 题意:x随机取a~b,y随机取c~d,求(x+y)mod p = m 的概率.(结果用分数表示) 题解: 数学概率题,运用到了一般的概率姿势. 要求z=x+y的概率,可以先算符合条件的x的个数,可以由x和y的范围列出2个不等式,用min和max表示得出x的个数. 这样概率就是x的个数/ ((b-a+1)(d-c+1)). 我们要求一大堆这种z的和. 搞一搞发现是等差数列求和+一堆和+等差数列求和. 可以画到二维坐标系…
先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假设有3步,那整个分布范围相当于一个立体几何图形,上界b和下界a可当成一个x+y+z=a或b的平面看待,算出x<=X1 x>=-X1 y<=X2 y>=-X2 z<=X3 z>=-X3 发现体积就是f(x1,x2,x3)+f(-x1,-x2,x3)+f(-x1,x2,-x3)…