TLE30分求调
查看原帖
TLE30分求调
1425185
kongliheng楼主2025/7/26 21:00
#include <bits/stdc++.h>
using namespace std;
//#define int long long
const int N = 30;
int n, m;
int a[N][N], dp[N];
int lll (int k) {
	int ans = 0;
	int pow[30] = {1};
	for (int i = 1; i <= 21; i++) pow [i] = (2 * pow[i - 1]);
	for (int i = 19; i >= 0; i--) {
		if (k >= pow[i]) k -= pow[i], ans++;
	}
	return ans;
}
int main() {
    ios::sync_with_stdio (false);
    cin.tie (0);
	cout.tie (0);
    cin >> n >> m;
  //  cout << lll (n) << "\n";
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> a[i][j];
    for (int i = 0; i < n; i++) {
        dp[i] = m;
        bool f = true;
        for (int j = 0; j < n; j++) {
            if (i == j) continue;
            bool ff = true;
            for (int k = 0; k < m; k++) {
                if (a[i][k] != a[j][k]) {
                    ff = false;
                    break;
                }
            }
            if (ff) {
            	f = false;
            	break;
            }
        }
        if (!f) {
        	cout << "-1 ";
        	continue;
        }
        for (int k = 0; k < (1 << m); k++) {
            bool flag = true;
            for (int j = 0; j < n; j++) {
                if (i == j) continue;
                bool ff = true;
                for (int kk = 0; kk < m; kk++) {
                    if ((k & (1 << kk)) && (a[i][kk] != a[j][kk])) {
                        ff = false;
                        break;
                    }
                }
                if (ff) {
                	flag = false;
                	break;
                }
            }
            if (flag) dp[i] = min (dp[i], lll (k));
          //  if (flag) cout << lll (k) << "\n";
        }
        cout << dp[i] << " ";
    }
	return 0;
}
2025/7/26 21:00
加载中...