absi2011's Blog & Daily Life.

全新的开始       我要省选翻盘       I wanna AK in 高考\化学       自此,生无可恋
[破碎的状态] [-41] Google Code Jam Round 3辅助记
[破碎的状态] [-19] BZOJ 1004

[破碎的状态] [-21] poj 3128

absi2011 posted @ Jul 01, 2016 11:42:26 PM in 网上比赛 with tags POJ 数学题 瞎搞 小高考 , 670 阅读

感谢@JCarlson 翻译

题意:

求某个字符串是否是从"ABCD...Z"通过某个置换连换两次得到

这一题..

对于长度为奇数置换,可以从另一个奇数置换直接换过来,我们不用管

对于长度为偶数的置换,一定是它长度的两倍的置换换出两个长度为偶数的置换..

没了..

#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<time.h>
#include<math.h>
#include<memory>
#include<vector>
#include<bitset>
#include<fstream>
#include<stdio.h>
#include<utility>
#include<sstream>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
char a[135];
int b[35];
int main()
{
    int t;
    scanf("%d",&t);
    int zu;
    for (zu=0;zu<t;zu++)
    {
        scanf("%s",a+'A');
        memset(b,0,sizeof(b));
        char j;
        for (j='A';j<='Z';j++)
        {
            if (a[j]!='#')
            {
                char now=j;
                int cnt=0;
                for (;;)
                {
                    char temp=a[now];
                    a[now]='#';
                    now=temp;
                    cnt++;
                    if (now==j) break;
                }
                b[cnt]^=1;
            }
        }
        int i;
        for (i=2;i<=26;i+=2)
        {
            if (b[i])
            {
                puts("No");
                break;
            }
        }
        if (i==28)
        {
            puts("Yes");
        }
    }
    return 0;
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter