hdu--1868--数学题<卧槽,我都TM做到数学题了>

数学渣掩面走过=-=

还好 这题 是高中知识吧... 数列求和的..

一开始 我想到了2层for最胸大无脑的方法.. 看到这数据就算了 <32位 很大啊..

又去想了会dp 没想出来 深搜感觉也不行...

就去化简式子了

x1 + x2 + x3 + ..... + xn   这边很特殊 公差d=1 所以 x2 = x1+1   x3 = x1+2  xn = x1 + n-1

那么就可以化简为  x1 * n + n*(n-1) / 2 = sum     这里的n是指数列长度  sum才是题目给我们的n 额 字母写的不好 见谅=-=  n*(n-1)/2 就是 0 , 1 ,2 ,3,4....n的和的公式

OK 到此 我也以为AC了

可是我还是TLE了...我就艾特了..

 1 #include <iostream>
 2 using namespace std;
 3
 4 int main()
 5 {
 6     cin.sync_with_stdio(false);
 7     int n , ans , temp;
 8     while( cin >> n )
 9     {
10         ans = 0;
11         for( int i = 2 ; i<=n ; i++ )
12         {
13             temp = i*(i-1)/2;
14             if(n>temp)
15             {
16                 if( (n-temp)%i == 0 )
17                     ans ++;
18             }
19         }
20         cout << ans << endl;
21     }
22     return 0;
23 }

其实你也看到了 我这边在for中多了一个判断   if( n>temp )因为有些和会比n大 然后相减是负数 但同样满足(n-temp)%i==0所以我需要剪了它

但我这样剪了 for这边还是会继续往下运行啊

其实 很简单 我只要在加一句话 else break;

 1 #include <iostream>
 2 using namespace std;
 3
 4 int main()
 5 {
 6     cin.sync_with_stdio(false);
 7     int n , ans , temp;
 8     while( cin >> n )
 9     {
10         ans = 0;
11         for( int i = 2 ; i<=n ; i++ )
12         {
13             temp = i*(i-1)/2;
14             if(n>temp)
15             {
16                 if( (n-temp)%i == 0 )
17                     ans ++;
18             }
19             else
20                 break;
21         }
22         cout << ans << endl;
23     }
24     return 0;
25 }

today:

  世上成千上万种爱

  但从来没有一种可以重来

hdu--1868--数学题<卧槽,我都TM做到数学题了>

时间: 2024-10-12 08:59:11

hdu--1868--数学题<卧槽,我都TM做到数学题了>的相关文章

hdu 4956 Poor Hanamichi BestCoder Round #5(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956 Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7    Accepted Submission(s): 4 Problem Description Hanamichi is taking part in

hdu 2368 Alfredo&#39;s Pizza Restaurant(简单数学题)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2368 题目很简单,但是比较恶心,用sqrt WA到死也不过,不用秒过: 忍不住吐槽一下; Problem Description Traditionally after the Local Contest, judges and contestants go to their favourite restaurant,

hdu 5100 Chessboard (额,,,,,就叫它趣味数学题吧)

题意: 用K*1的砖块去覆盖N*N的大矩形,问最多能覆盖多少块. 详细证明:(转载自matrix67) Matrix67: The Aha Moments 趣题:用 k × 1 的矩形覆盖 n × n 的正方形棋盘 用 k × 1 的小矩形覆盖一个 n × n 的正方形棋盘,往往不能实现完全覆盖(比如,有时候 n × n 甚至根本就不是 k 的整倍数).不过,在众多覆盖方案中,总有一种覆盖方案会让没有覆盖到的方格个数达到最少,我们就用 m(n, k) 来表示这个数目.求证:不管 n 和 k 是多

HDU 1282 回文数猜想(简单数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1282 Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止.例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数.于是有数学家提出一个

HDU 3153 Pencils from the 19th Century(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3153 Problem Description Before "automaton" was a theoretic computer science concept, it meant "mechanical figure or contrivance constructed to act as if by its own motive power; robot." E

HDU 1898 Sempr == The Best Problem Solver?(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1898 Problem Description As is known to all, Sempr(Liangjing Wang) had solved more than 1400 problems on POJ, but nobody know the days and nights he had spent on solving problems. Xiangsanzi(Chen Zhou) w

HDU 1046 &amp; POJ 1450 Gridland【有趣的数学题】

Gridland Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5697    Accepted Submission(s): 2607 Problem Description For years, computer scientists have been trying to find efficient solutions to

hdu 1868 Consecutive sum

我们假设成立数列的首相和末项分别为a和b, 由求和公式可得(a+b)*(b-a-1)/2==n;再设a+b=x,b-a+1=y,则有方程组 x*y=n*2, 两式相加得x+y=2*b+1,故有x+(2*n/x)=2*a-1 因此我们只要检测能被2*n整除且使上面方程满足中a为正整数的情况(b比a大,b就不用判断了),由于3*5与5*3是同一种情况,所以只需要从1循环到sqrt(n) ,889ms险过 #include<iostream> #include<cmath> using

HDU ACM 2740 Root of the Problem 简单数学题

题意:求A,使得A^N最接近B. 分析:A=B^(1/n),对其上下取整,在各取N次幂,取最接近B的. #include<iostream> #include<cmath> using namespace std; int main() { int B,N,p,q; double tmp; while(cin>>B>>N && (B||N)) { tmp=pow(1.0*B,1.0/N); p=floor(tmp); //向下取整 q=cei