日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

HDU 1153 magic bitstrings(读题+)

發布時間:2025/3/15 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 1153 magic bitstrings(读题+) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 hdu 1153 magic bitstrings

題目大意

????一個質數p,現在讓你求一個p-1長度的“01魔法串”。關于這個魔法串是這么定義的:?
????我們現在把這個串經過一段處理變成一個長寬均為p-1的矩陣,對于第i行的串,是由原來的串按每i位取得的。如果這個矩陣每行的串滿足:和原來的串相等或是原來的串按位取反,我們就稱這個串是魔法串。(說了一大堆如果還沒看懂就去問題底下的Discuss看吧….)


題解

????一開始熱衷于討論第一行和最后一行的關系…結果什么也沒看出來…后來看了別人的題解,才發現自己有多蠢。?
????我們把前兩行先寫出來:

Column1Column2Columnp?1
a1.mod.pa2.mod.pap?1
a2.mod.pa4.mod.pa[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(读题+)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。