Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โค้ด C++ ตรวจสอบคิวรี่ผลรวมเป็นศูนย์

โจทย์: อาร์เรย์ A ค่าอยู่ในช่วง -1 ถึง 1 มีคิวรี่ m คู่ Q[i]=(li,ri) ตอบ 1 หากจัดเรียง A ใหม่ได้ว่าผลรวมช่วง li ถึง ri = 0 มิฉะนั้น 0

Input: A=[-1,1,1,1,-1], Q=[[1,1],[2,3],[3,5],[2,5],[1,5]] → Output: [0,1,0,1,0]

ขั้นตอนแก้

z := count of negative values in A
if z > n-z: z := n-z
for each query (l,r):
    len := r - l + 1
    if (len % 2 == 0) and (len/2 <= z): print 1 else 0

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A, vector<vector<int>> Q) {
    int n = A.size(), m = Q.size(), z = 0;
    for (int a, i = 0; i < n; ++i) z += a < 0;
    if (z > n - z) z = n - z;
    for (int i = 0; i < m; i++) {
        int l = Q[i][0], r = Q[i][1];
        cout << (((r - l) % 2 && (r - l + 1) / 2) <= z) << ", ";
    }
}
int main() {
    vector<int> A = {-1,1,1,1,-1};
    vector<vector<int>> Q = {{1,1},{2,3},{3,5},{2,5},{1,5}};
    solve(A,Q);
}

Input

{-1,1,1,1,-1}, {{1,1},{2,3},{3,5},{2,5},{1,5}}

Output

1, 0, 1, 0, 1,