usaco_1.4.3

来源:互联网 发布:淘宝商品的详情页 编辑:程序博客网 时间:2024/05/23 00:04

做的时候只知道把表打出来,不知道怎么去找等差数列。

做法直接枚举公差和首项即可。

AC代码:


/*ID: 123PROG: ariprogLANG: C++*/#include <cstdio>#include <string.h>const int MAX_NUMBER = 250 * 250 * 2 + 3;bool vis[MAX_NUMBER];int n, m;void init() {    for (int i = 0; i <= m; i++) {        for (int j = 0; j <= m; j++) {            vis[i * i + j * j] = true;        }    }}bool isAr(int first, int difference) {    for (int i = 0; i < n; i++) {        if (!vis[first + i * difference]) {            return false;        }    }    return true;}int main() {    FILE *in = fopen("ariprog.in", "r");    FILE *out = fopen("ariprog.out", "w");    fscanf(in, "%d%d", &n, &m);    memset(vis, 0, sizeof(vis));    init();    int max_difference = m * m * 2;    int flag = 0;    for (int difference = 1; difference <= max_difference; difference++) {        for (int first = 0; first + (n - 1) * difference <= max_difference; first++) {            if (isAr(first, difference)) {                fprintf(out, "%d %d\n", first, difference);                flag = 1;            }        }    }    if (!flag) {        fprintf(out, "NONE\n");    }    return 0;}


原创粉丝点击