今日练习

今日练习

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;
}