Diverse Game

Diverse Game
Codeforces easy

يوجد \(T\) حالة اختبار. في كل حالة يُعطى لك مصفوفة \(A\) بحجم \(N \times M\) تحتوي على جميع الأعداد الصحيحة من \(1\) إلى \(N \cdot M\) مرة واحدة بالضبط. أنشئ مصفوفة \(B\) بنفس الحجم بحيث لكل خلية \((i, j)\)، يكون \(A_{i,j} \neq B_{i,j}\).
إذا كان ذلك مستحيلًا، اطبع \(-1\).

Solution

أولًا، نكتب حلقة تدور على جميع الحالات \(T\).

int test_cases;
cin >> test_cases;

while(testcases--){
    // حل كل حالة يكتب هنا
}

الحالة الوحيدة التي لا يوجد لها حل هي عندما \(N = M = 1\). ما عدا ذلك، نقول أن \(B_{i,j} = A_{i,j} + 1\)، وإذا كان \(A_{i,j} = N \cdot M\)، عندها نضع \(B_{i,j} = 1\). هذا يضمن أن \(B_{i,j} \neq A_{i,j}\) لجميع الخلايا.

int n, m;
cin >> n >> m;

int a[n][m], b[n][m];

for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cin >> a[i][j];

        if (a[i][j] == n * m) b[i][j] = 1;
        else b[i][j] = a[i][j] + 1;
    }
}

أخيرًا، نحتاج إلى التحقق إذا كان \(N = M = 1\). اذا تحقق الشرط نطبع \(-1\) وذا لم يتحقق نطبع المصفوفة \(B\).

if (n == 1 && m == 1) {
    cout << -1 << "\n";
    continue; // للذهاب إلى الحالة القادم
}
// لا يتحقق n = m = 1  الآن نعرف ان الشرط 
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << b[i][j] << ' ';
    }
    cout << endl;// يجعل كل صف يطبع في سطر مختلف
}