今日练习
UVA 10755 不会;
Gym 101388J FULL COPY;
UVA 10755
//
// Created by 21122 on 2022/6/5/0005.
//
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 25;
long long arr[MAXN][MAXN][MAXN];
int main()
{
// int T;
// cin >> T;
// while(T--)
// {
//
// }
int A, B, C;
cin >> A >> B >> C;
for(int i = 1; i <= A; i++)
{
for(int j = 1; j <= B; j++)
{
for(int k = 1; k <= C; k++)
{
long long temp;
cin >> temp;
// 互斥原理
arr[i][j][k] = arr[i][j][k - 1] + arr[i][j - 1][k] + temp - arr[i][j - 1][k - 1];
}
}
}
for(int i = 1; )
return 0;
}
Gym 101388J
//
// Created by 21122 on 2022/6/7/0007.
//
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<stdio.h>
using namespace std;
const int MAXN = 25;
map<int, int> table;
int bitcount(int x)
{
return x == 0 ? 0 : bitcount(x / 2) + (x & 1);
}
int main()
{
// 考虑判断奇偶性的方法
// 1是计数 % 2, 2是 将奇数记为0, 偶数记为1, 最后异或的结果则为 0 则是偶数
int n;
int A[MAXN];
char s[1000];
cin >> n;
while(scanf("%d", &n) == 1 & n)
{
for(int i = 0; i < n; i++)
{
scanf("&s", s);
A[i] = 0;
for(int j = 0; s[j] != '\0'; j++)
{
A[i] ^= ( 1 << (s[j] - 'A'));
}
}
}
table.clear();
int n1 = n / 2;
int n2 = n - n1;
for(int i = 0; i < (1 << n1); i++)
{
int x = 0;
for(int j = 0; j < n1; j ++)
{
if(i & (1 & (1 << j)))
{
x ^= A[j];
}
}
if(table.count(x) && bitcount(table[x]) < bitcount(i))
{
table[x] = i;
}
}
int ans = 0;
for(int i = 0; i < (1 << n2); i++)
{
int x = 0;
for(int j = 0; j < n2; j++) if (i & (1 << j)) x ^= A[n1 + j];
if(table.count(x) && bitcount(ans) < bitcount(table[x]) + bitcount(i))
ans = (1 << n1) ^ table[x];
}
cout << bitcount << endl;
for(int i = 0; i < n; i++)
{
if (ans % ( 1 << i))
{
cout << i + 1;
}
}
cout << endl;
return 0;
}