HDU 1153 magic bitstrings(读题+)
hdu 1153 magic bitstrings
題目大意
????一個質數p,現在讓你求一個p-1長度的“01魔法串”。關于這個魔法串是這么定義的:?
????我們現在把這個串經過一段處理變成一個長寬均為p-1的矩陣,對于第i行的串,是由原來的串按每i位取得的。如果這個矩陣每行的串滿足:和原來的串相等或是原來的串按位取反,我們就稱這個串是魔法串。(說了一大堆如果還沒看懂就去問題底下的Discuss看吧….)
題解
????一開始熱衷于討論第一行和最后一行的關系…結果什么也沒看出來…后來看了別人的題解,才發現自己有多蠢。?
????我們把前兩行先寫出來:
| a1.mod.p | a2.mod.p | … | ap?1 |
| a2.mod.p | a4.mod.p | … | a[2?(p?1)].mod.p |
????我們可以看到,討論表格前兩列的話?a1.mod.p?和?a2.mod.p?如果相等,那么?a2.mod.p?和?a4.mod.p?一定也相等,所以我們得到?a1.mod.p?和?a4.mod.p?相等;而如果?a1.mod.p?和?a2.mod.p?不相等的話,我們同樣推出?a1.mod.p?和?a4.mod.p?相等,所以?a1.mod.p?和?a4.mod.p?一定是相等的。?
????同理可以得到?a1.mod.p?和?a9.mod.p?相等、?a1.mod.p?和?a16.mod.p?相等…..所以我們得出一個結論:?ai2.mod.p?都是相等的,其余各項也都是相等的。?
????為了字典序最小,我們把所有?ai2.mod.p?置為0,其余各項置為1,除了2以外,對于所有的質數都是有解的。
?
?
把矩陣列出來
a[1%n], a[2%n], a[3%n], ..., a[n-1] ? ? ? ? ? ? ? ? ?(1)
a[2%n], a[4%n], a[6%n], ..., a[2(n-1)%n] ? ? ? (2)
a[3%n], a[6%n], a[9%n], ..., a[3(n-1)%n] ? ? ? (3)
...
?
比較 (1), (2)
發現:
如果 a[1%n] != a[2%n],那么 a[2%n] != a[4%n],那么 a[1%n] == a[4%n];
如果?a[1%n] == a[2%n],那么 a[2%n] == a[4%n],那么 a[1%n] == a[4%n]。
所以 a[1%n] == a[4%n]
同樣的方法得到:
a[1%n] == a[9%n],
a[1%n] == a[16%n],
....
所有下標是 i 平方 mod n 都相等。
下標不是 i 平方 mod n 都相等。
?
為了字典順序最小,并且避免整個數列都是同一個數(題目要求 non-constant),令 a[1%n] = a[4%n] = a[9%n] = ... = 0,其他數都是 1,這樣符合題意。
?
#include <iostream> #include <cstring> #include <cstdio> #define LL long longusing namespace std;LL p; bool flag[1000005];int main() {while(scanf("%I64d",&p),p!=0){memset(flag,0,sizeof(flag));if (p==2){printf("Impossible\n");continue;}for (LL i=1;i<p;i++) flag[(i*i)%p]=1;for (int i=1;i<p;i++) printf("%d",!flag[i]);printf("\n");}return 0; }?
#include <iostream> #include <iterator> #include <algorithm> #include <vector>int main () {long long p;while ((std::cin >> p) && p) {if (p == 2) {std::cout << "Impossible\n";continue;}std::vector <int> v (p, 1);for (long long i=1; i<p; ++i) {v [i * i % p] = 0;}std::copy (v.begin() + 1, v.end(), std::ostream_iterator <int> (std::cout));std::cout << "\n";}return 0; }?
轉載于:https://www.cnblogs.com/kimsimple/p/6714447.html
總結
以上是生活随笔為你收集整理的HDU 1153 magic bitstrings(读题+)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅析 Linux 初始化 init 系统
- 下一篇: 400