uva 138 Street Numbers(打表大法好)

来源:互联网 发布:淘宝首页的广告位费用 编辑:程序博客网 时间:2024/05/29 09:35

题意:打印出10个,1~m 的和等于 m~n的m和n


解析:由题意:( 1 + m ) * m = ( m + n ) * ( n - m + 1 ).

          整理得: 2 * m * m = n * ( n + 1 ).

          二分搞一搞 + 究极打表大法.


代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long longusing namespace std;const int maxn = 1e6;const int inf = 0x3f3f3f3f;const double eps = 1e-8;const double pi = 4 * atan(1.0);const double ee = exp(1.0);int main(){    #ifdef LOCAL    //freopen("in.txt", "r", stdin);    freopen("out.txt", "w", stdout);    #endif // LOCAL    printf("#include <cstdio>\n\n");    printf("int main()\n");    printf("{\n");    int cnt = 0;    LL n = 2;    while (cnt < 10)    {        LL lo = 1, hi = n;        while (lo <= hi)        {            LL mi = (lo + hi) >> 1;            LL t1 = 2 * mi * mi;            LL t2 = n * (n + 1);            if (t1 == t2)            {                printf("\tprintf(\"%10lld%10lld\\n\");\n", mi, n);                cnt++;                break;            }            if (t1 < t2)                lo = mi + 1;            else                hi = mi - 1;        }        n++;    }    printf("\treturn 0;\n");    printf("}");    return 0;}

#include <cstdio>int main(){printf("         6         8\n");printf("        35        49\n");printf("       204       288\n");printf("      1189      1681\n");printf("      6930      9800\n");printf("     40391     57121\n");printf("    235416    332928\n");printf("   1372105   1940449\n");printf("   7997214  11309768\n");printf("  46611179  65918161\n");return 0;}


0 0