C - Sums Gym - 100543C

C - Sums Gym - 100543C_第1张图片

思路:
枚举这个等差序列的长度。

ACNEW

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
typedef long long ll;

typedef long long ll;
const int maxn = 1e5 + 7;

int main() {
    int T;scanf("%d",&T);
    while(T--) {
        int n;scanf("%d",&n);
        
        int t = sqrt(n) * 2;
        int flag = 0;
        for(int i = 2;i <= t;i++) {
            int num = (1 + i) * i / 2;
            if((n - num) % i == 0) {
                int num2 = (n - num) / i;
                if(num2 < 0) continue;
                printf("%d = ",n);
                for(int j = 1;j <= i;j++) {
                    printf("%d",j + num2);
                    if(j != i) {
                        printf(" + ");
                    }
                }
                printf("\n");
                flag = 1;
                break;
            }
        }
        if(flag == 0) {
            printf("IMPOSSIBLE\n");
        }
    }
    return 0;
}

AC2

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

const int maxn = 1e6 + 7;

map<int,pair<int,int>>mp;

void Print(int n,int x,int y) { //初始值x,长度y
    printf("%d = ",n);
    for(int i = 1;i < y;i++) {
        printf("%d + ",x);
        x++;
    }
    printf("%d\n",x);
}

int main() {
    int T;scanf("%d",&T);
    while(T--) {
        int sum = 1;
        int n;scanf("%d",&n);
        if(n == 1) {
            printf("IMPOSSIBLE\n");
            continue;
        }
        if(mp[n].first) {
            if(mp[n].first == -1) {
                printf("IMPOSSIBLE\n");
                continue;
            }
            else {
                Print(n,mp[n].first,mp[n].second);
                continue;
            }
        }
        int num = sqrt(n) * 2;
        for(int i = 2;i <= num;i++) {
            sum += i;
            if((n - sum) % i == 0) {
                mp[n].first = 1 + (n - sum) / i;
                mp[n].second = i;
                Print(n,mp[n].first,mp[n].second);
                break;
            }
        }
        if(mp[n].first == 0) {
            printf("IMPOSSIBLE\n");
            mp[n].first = -1;
            mp[n].second = -1;
        }
    }
    return 0;
}

你可能感兴趣的:(#,gym)