題意:給乙個置換,判斷是否是另乙個置換的平方。
乙個置換可以表示成迴圈的乘積。對於長度為偶數的迴圈,它的平方會**成兩個長度各位之前一半的迴圈。對於長度為奇數的迴圈,它的平方不會**。所以對於當前置換中長度為偶數的迴圈,一定是以前的置換**出來的,判斷每個長度為偶數的迴圈的個數是否為偶數個即可。對於長度為奇數的迴圈,不用考慮。
**:
#include #include #include #include #include #include#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define pb push_back
#define mp make_pair
#define rep(i,x,n) for(int i=x;i<(n);++i)
#define for(i,l,h) for(int i=(l);i<=(h);++i)
#define ford(i,h,l) for(int i=(h);i>=(l);--i)
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define ri(x) scanf("%d", &(x))
#define rii(x, y) scanf("%d%d", &(x), &(y))
#define riii(x, y, z) scanf("%d%d%d", &(x), &(y), &(z))
#define dri(x) int (x); scanf("%d", &x)
#define drii(x, y) int x, y; scanf("%d%d", &x, &y)
#define driii(x, y, z) int x, y, z; scanf("%d%d%d", &x, &y, &z)
#define oi(x) printf("%d",x);
#define rs(x) scanf("%s", (x))
#define ms0(x) memset((x), 0, sizeof((x)))
#define ms1(x) memset((x), -1, sizeof((x)))
#define len(x) strlen(x)
#define f first
#define s second
#define swap(a, b) (a ^= b, b ^= a, a ^= b)
#define dpoint strcut node
#define cmpd int cmp(const int &a,const int &b)
/*#ifdef home
freopen("in.txt","r",stdin);
#endif*/
const int mod = 1e9+7;
typedef vectorvi;
typedef vectorvs;
typedef vectorvd;
typedef long long ll;
typedef pairpii;
//#define home
int scan()
/*----------------please-----do-----not-----hack-----me--------------------*/
char s[30];
int a[30];
int cnt[30];
int vis[30];
int main()
ms0(cnt);
ms0(vis);
rep(i,0,26)
}cnt[len]++;
}int ok=1;
for(int i=2;i<27;i+=2)
}if(ok)
printf("yes\n");
else
printf("no\n");
} return 0;
}
poj 1012 約瑟夫置換
一開始用的不是約瑟夫置換 關鍵是要儲存之前求出的值。因為只有13個數,所以也可以另開程式手動求出所有k值塞進陣列,這樣每次查詢都是o 1 0ms了 首先m值必須在 k 1 2kn,2k n 1 n 0,1,2 之間,然後 列舉。include include include include incl...
poj 3270 Cow Sorting 置換問題
有n頭牛,沒頭牛都有自己的暴躁指數,並且互補相同,要把這些牛按暴躁指數從小到大排列,每次交換兩頭牛,消耗的體力為兩頭牛的暴躁指數和。應用的知識為置換。如把 1 2 3 4 5 6 變成 6 3 4 2 1 5 發現可以分成兩組來交換,第一組是 6 1 5 第二組為 2,3,4 只需交換組內的元素就可...
POJ2109 高精度(含大數開方) 二分
1 高精度 含大數開方 二分 乙個技巧和三點注意 技巧 假設k n p k的n次方 那麼p的位數 n得到的是k的位數!例如 n 7,p 4357186184021382204544,p的位數為22,用22 7的結果向上取整,得到4,即為k的位數,也就是說k的取值範圍是1000 9999。引自code...