您的位置:首页 > 其它

uva 138 Street Numbers(打表大法好)

2014-12-29 19:20 302 查看
题意:打印出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 long

using 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: