私はここでICPCの質問をしていました
問題は、* と . 1回の操作で行内の要素を切り替えることができるように、最初に正またはゼロになる行を切り替えました(行を2回切り替えると0の変化が得られます)*の変化は降順です。最後に、トグルが 1 つ残っている場合は、負の変化がある行の中で絶対値が最小の行をトグルします。
これが私のコードです - IDEONE.COMのコードの下にいくつかのテストケースがあります
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (t = t; t > 0; t--) {
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
char[][] array = new char[n][m] ;
int[] tracker = new int[n];
int[] trackerl = new int[n];
int i,j;
for (i = 0; i < n; i++) {
String temp = sc.next();
for (j = 0; j < m; j++) {
array[i][j] = (temp.charAt(j));
}
}
int light = 0, diamond = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (array[i][j] == '*') {
diamond++;
}
}
tracker[i] = diamond;
diamond = 0;
}
int a, b;
int temp;
int sortTheNumbers = n;
for (a = 1; a < sortTheNumbers; a++) {
for (b = 0; b < sortTheNumbers-a; b++) {
if (tracker[b] > tracker[b + 1]) {
temp = tracker[b];
tracker[b] = tracker[b + 1];
tracker[b + 1] = temp;
}
}
}
for (i = 0; i < n; i++)
trackerl[i]=m-tracker[i];
int br = 0;
try {
if (m % 2 == 0) {
for ( i = 0; i <= n - 1; i++)
if (tracker[i] > (m) / 2)
br++;
}
if (m % 2 !=0 ) {
for (i = 0; i <= n - 1; i++)
if (tracker[i] >= (m + 1) / 2)
br++;
}
} catch (Exception e) {
}
int ans = 0;
try {
if (br >= k) {
for (i = n - 1; i > (n - 1 - k); i--)
ans += tracker[i];
for (i = (n - 1 - k); i >= 0; i--)
ans += trackerl[i];
}
if (br < k) {
if (br != 0 && br != n) {
for (i = n - 1; i > (n - br); i--) {
ans += tracker[i];
k--;
}
int pass1 = 0, pass2 = 0;
if (k % 2 == 0)
pass1 = Math.max(tracker[(n - br)] + tracker[(n - br - 1)],
trackerl[(n - br)] + trackerl[(n - br - 1)]);
if (k % 2 != 0)
pass2 = Math.max(tracker[(n - br)] + trackerl[(n - br - 1)],
trackerl[(n - br)] + tracker[(n - br - 1)]);
// System.out.print("Hp" + tracker[(n - br)]);
}
ans += Math.max(pass1, pass2);
for (i = (n - 2 - br); i >= 0; i--)
ans += trackerl[i];
}
if (br != 0 && br == n) {
for (i = n - 1; i > (n - br); i--) {
ans += tracker[i];
k--;
}
if (k % 2 != 0) {
ans += tracker[(n - br)];
}
if (k % 2 == 0) {
ans += trackerl[(n - br)];
}
for (i = (n - 1 - br); i >= 0; i--) {
ans += trackerl[i];
}
}
if (br == 0) {
if (k % 2 != 0) {
ans += tracker[(n - 1)];
}
if (k % 2 == 0) {
ans += trackerl[(n - 1)];
}
for (i = (n - 2); i >= 0; i--) {
ans += trackerl[i];
}
}
}
} catch (Exception e) {
}
System.out.println(""+ans);
}
}
}
どのテスト ケースを選択しても、正しい答えが得られます。リンクからわかるように、テストケースの多様性を維持しましたが、それでもコードは正しくなく、審査員に受け入れられません。どこに欠陥があるのか 本当にわかりません.それは私のコードですか、それとも私のロジックにありますか? 私のためにそれを指摘してください。