AcMore-1493(划分问题)

来源:互联网 发布:用雪糕棍做房子数据 编辑:程序博客网 时间:2024/06/07 22:37

诶呀妈呀,这么牛!!!

波哥就是牛,他的一个结论让我以后接这些问题都迎刃而解了,那就是一般的划分问题都满足,

2次方程

及f(x) = a*x*x + b * x + c;


而且我验证了这个,还就是这么回事,

所以真是个神奇的东西!!!!;

贴出他的:

D.平面划分

推理题:

   

新加入的一条直线与前面的直线都相交能够得到最多的空间划分。考虑到绿色的线是第三根插入的线,那么标号为1,2,3的线就是新区域的边界。对于如图加入第二个V型线,新增5个区域。如果增加第三个椭圆,新增4个区域。最后推出对于直线f[i] = f[i-1] + i;对于V型线f[i] = f[i-1] + 4*i-3;对于椭圆f[i] = f[i] + 2*i-2。  /*这个确实能够推的出来,只要你细心的,规规矩矩的多画几个,一般这样的是可以解决的!*/

代码如下:

Problem D#include <cstdlib>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <ctime>using namespace std;const int MaxN = 1000000;long long f1[MaxN+5];long long f2[MaxN+5];long long f3[MaxN+5];void pre() {    f1[1] = f2[1] = f3[1] = 2;    for (int i = 2; i <= MaxN; ++i) {        f1[i] = f1[i-1] + i;    }    for (int i = 2; i <= MaxN; ++i) {        f2[i] = f2[i-1] + 4*i-3;    }    for (int i = 2; i <= MaxN; ++i) {        f3[i] = f3[i-1] + 2*i-2;        }}int main() {//    clock_t sta = clock();//    freopen("data.in", "r", stdin);//    freopen("data.out", "w", stdout);    int N;    pre();    while (scanf("%d", &N) != EOF) {        printf("%lld %lld %lld\n", f1[N], f2[N], f3[N]);    }//    clock_t end = clock();//    printf("%f\n", 1.0*(end-sta)/1000);    return 0;}




我的

#include <stdio.h>#include <string.h>#include <iostream>#include <string>using namespace std;int main(){long long int N;while (scanf("%lld", &N) != EOF){long long int a = (N * N + N + 2) / 2;long long int b = 2 * N * N - N + 1;long long int c = N * N - N + 2;printf("%lld %lld %lld\n", a, b, c);}//system("pause");return 0;}



原创粉丝点击