50分求解!
  • 板块题目总版
  • 楼主zhege122
  • 当前回复7
  • 已保存回复8
  • 发布时间2024/8/31 12:53
  • 上次更新2024/8/31 14:19:49
查看原帖
50分求解!
1123449
zhege122楼主2024/8/31 12:53

题目描述

给定长度为n的整数序列和数字m,要求在相邻的两个数字之间插入加('+')或减('-')操作符(不能动原序列顺序),使得算术结果是m的整数倍。

例如序列为:3, -3, -9, 0,m=3,那么3+(-3)+(-9)=-9是3的整数倍。

输入格式

输入 n m 。

1≤n≤10^5, 2≤m≤100

第二行有n个整数, 每个整数的绝对值不大于10^5.

输出格式

输出,如果可以插入操作符使得算术结果是m的整数倍,输出’Right’,否则输出’Wrong’。

样例输入1:

4 3
3 -3 -9 0

样例输出1:

Right

样例输入2:

4 2
9 -3 22 4

样例输出2:

Right

我的50分代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
int a[N], dp[N][110];

int main() {
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
		a[i] = a[i] % m;
	}
	
	dp[1][a[1]%m] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < m; j++) {
			if (dp[i][j] == 1) {
				dp[i+1][(j + a[i+1]) % m] = 1;
				dp[i+1][(j - a[i+1] + m) % m] = 1;
			}
		}
	}
	
	if (dp[n][0] == 1) {
		printf("Right\n");
	} else {
		printf("Wrong\n");
	}
	
	return 0;
}

到底哪里错了?

2024/8/31 12:53
加载中...