@chani

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ABC425のC問題がACできません。

ABC425のC問題で、間違えてる箇所がわかりません。
9/22ACです。どこが間違えてるのか教えていただきたいです。

#include
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
using ll = long long; using ld = long double;
using Graph = vector>;
#define pb(x) push_back(x);

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n,c,q,start = 0,l = 0, r = 0; cin >> n >> q;
vector vec(2*n);
vector ruiseki(n+1,0);
rep(i,0,n) {
cin >> vec[i];
vec[i+n] = vec[i];
}
ll sum = 0;
ruiseki[0] = 0;
rep(i,0,n) {
sum += vec[i];
ruiseki[i+1] += sum;
}
rep(i,0,q) {
int typ; cin >> typ;
if(typ == 1) {
cin >> c;
start += c;
start %= n;
}
else {
cin >> l >> r;
l = (l-1+start) % n;
r = (r-1+start) %n;
if( r < l) {
cout << ruiseki[n] - ruiseki[r] + ruiseki[l-1]<< endl;
}else {
cout << ruiseki[r+1] - ruiseki[l] << endl;;
}
}
}
// for(int x : ruiseki) {
// cout << x << " ";
// }
// cout << endl;
// for(int x : vec) {
// cout << x << " ";
// }
return 0;
}

0 likes

2Answer

間違えてるのは、以下の箇所になります。

cout << ruiseki[n] - ruiseki[r] + ruiseki[l - 1] << endl;

例えば、以下の入力例で、正しい出力は29ですが、ご提示のコードだと32が表示されます。

5 2
1 2 4 8 16
1 1
2 2 5
0Like

根本原因は、vec2n作成しているが、ruiseki2n分を作成していないことだと思います。
2n分のruisekiを作成していれば、常にruiseki[r] - ruiseki[l]で求まるはずです。

0Like

Your answer might help someone💌