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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NOIP提高模拟-20181019-T1-加密

發(fā)布時間:2025/3/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOIP提高模拟-20181019-T1-加密 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面

我還是太菜了,考試的時候只寫了一個70pts70pts70pts的暴力,用mapmapmap居然可以過707070分。這么良心的出題人少見了啊,然而之后的滿分做法會讓你們知道出題人有多么毒瘤。

Solution

70pts70pts70pts做法

反正題目都給了你一個Hash函數(shù),直接預(yù)處理然后mapmapmap儲存就可以搞定。

100pts100pts100pts做法

本題實質(zhì)上是一個編碼與解碼的問題,我們只需要對于每個給定的輸入,一波逆運算就可以AC。
然而,HashHashHash函數(shù)長成這樣:

unsigned int Hash(unsigned int t){unsigned int t=v;t=t+(t<<10);t=t^(t>>6);t=t+(t<<3);t=t^(t>>11);t=t+(t<<16);return t; }

觀察以后發(fā)現(xiàn),誒,有個異或操作,woc,我不會還原異或!!!!!
不要慌,仔細想一想,對于t=tt=tt=t ^ (t&gt;&gt;i)(t&gt;&gt;i)(t>>i),我們在計算之前,可以考慮把ttt分成32i32 \over ii32?份(結(jié)果向上取整),為什么要這么做呢?因為可以看做是這樣的:

按照上面的想法,我們將現(xiàn)在的數(shù)分成三份(當前的數(shù)按照二進制表示,是一個010101串):X1X1X1,X2X2X2,X3X3X3。
那么X1X1X1可以看作是t&lt;&lt;22t&lt;&lt;22t<<22,那么X2X2X2怎么算呢?我們可以這樣想:

這個想法很直觀,但是怎么在數(shù)學(xué)上實現(xiàn)呢?先讓t&gt;&gt;11t&gt;&gt;11t>>11,這樣就裁掉X3X3X3了,然后我們再讓ttt異或上X1&lt;&lt;11X1&lt;&lt;11X1<<11,因為一個數(shù)異或自己等于零,異或零等于自己,所以說我們讓ttt當中原來和X1X1X1相等的部分和X1&lt;&lt;11X1&lt;&lt;11X1<<11異或,這樣就在裁掉X1X1X1的同時,保證了X2X2X2是完好的。X3X3X3按照一樣的思想,稍加推算也可以得出式子。
那么,現(xiàn)在我們有X1X1X1,X2X2X2,X3X3X3了,怎么進一步還原ttt呢?注意到,現(xiàn)在的數(shù),實際上是原數(shù)異或上X1,X2X1,X2X1,X2兩段得到的,也就是說現(xiàn)在的X2X2X2是原數(shù)的X2X2X2和現(xiàn)在的X1X1X1異或得到的,所以說反過來異或一次,即X2X2X2異或X1X1X1,就是原數(shù)的X2X2X2那一段,X3X3X3同理,X1X1X1是沒有變的。所以會所我們再將這幾段拼接回去就好了。方法也很簡單,將X1&lt;&lt;22X1&lt;&lt;22X1<<22異或X2&lt;&lt;11X2&lt;&lt;11X2<<11再異或X3X3X3即可,可以自己手推一下,加深理解。
這樣的話,異或的逆運算就解決了,而加又怎么辦呢?
其實這相當解一個方程:
(2i+1)x≡t(mod232) \left(2^i+1\right)x\equiv t \pmod {2^{32}} (2i+1)xt(mod232)
顯然擴展歐幾里得算法就可以搞定這一步,具體見代碼實現(xiàn)。

#include<bits/stdc++.h> using namespace std; typedef long long ll; ll read(){ll sum=0,neg=1;char c=getchar();while((c>'9'||c<'0')&&c!='-') c=getchar();if(c=='-') neg=-1,c=getchar();while(c>='0'&&c<='9') sum=(sum<<1)+(sum<<3)+c-'0',c=getchar();return sum*neg; } /* 70pts做法,十分暴力的打表。 map<unsigned int,int> h; unsigned int Hash(unsigned int v){unsigned int t=v;t=t+(t<<10);t=t^(t>>6);t=t+(t<<3);t=t^(t>>11);t=t+(t<<16);return t; } int main(){freopen("encrypt.in","r",stdin);freopen("encrypt.out","w",stdout);for(unsigned int i=1;i<=100000;i++) h[Hash(i)]=i;int q;q=read();for(int i=1;i<=q;i++){int t;t=read();printf("%d\n",h[t]);}return 0; } */ //100pts const ll mod=1ll<<32; ll exgcd(ll a,ll b,ll &x,ll &y){b?(exgcd(b,a%b,y,x),y-=a/b*x):(x=1,y=0); } ll calcinv(ll t){ll x,y;exgcd(t,mod,x,y);x=(x%mod+mod)%mod;return x; } ll ksc(ll a,ll b,ll ret=0){//快速乘,直接乘會爆long long for(;b;b>>=1,a=(a+a)%mod) if(b&1) ret=(ret+a)%mod;return ret; } int main(){/*ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);*/int q;q=read();for(int i=1;i<=q;i++){ll t=read();//第一步還原->還原t=t+(t<<16) t=ksc(t,calcinv((1ll<<16)+1));//第二步還原->還原t=t^(t>>11) ll x1=t>>22,x2=(t>>11)^(x1<<11),x3=t^(x1<<22)^(x2<<11);x2=x2^x1; x3=x3^x2; t=(x1<<22)^(x2<<11)^x3;//第三步還原->還原t=t+(t<<3)t=ksc(t,calcinv((1ll<<3)+1));//第四步還原->還原t=t^(t>>6)x1=t>>30,x2=(t>>24)^(x1<<6),x3=(t>>18)^(x1<<12)^(x2<<6);ll x4=(t>>12)^(x1<<18)^(x2<<12)^(x3<<6),x5=(t>>6)^(x1<<24)^(x2<<18)^(x3<<12)^(x4<<6);ll x6=t^(x1<<30)^(x2<<24)^(x3<<18)^(x4<<12)^(x5<<6);x2^=x1,x3^=x2,x4^=x3,x5^=x4,x6^=x5;t=(x1<<30)^(x2<<24)^(x3<<18)^(x4<<12)^(x5<<6)^x6;//第五步還原->還原t=t+(t<<10)t=ksc(t,calcinv((1ll<<10)+1));printf("%lld\n",t);}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/Neonen/p/9832492.html

總結(jié)

以上是生活随笔為你收集整理的NOIP提高模拟-20181019-T1-加密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 毛片在线免费视频 | 色综合视频在线 | 四虎影视免费在线观看 | www.日韩高清 | 日本精品视频在线 | 99r在线视频 | 在线观看污视频网站 | 久久1234 | 一级二级在线观看 | 五月的婷婷 | 欧美性猛交ⅹxx乱大交 | 丁香婷婷深情五月亚洲 | 少妇高清精品毛片在线视频 | 国产高清久久久 | 强开小嫩苞一区二区三区网站 | 五月婷av| xxxx.国产| 丝袜美腿亚洲综合 | jzzijzzij亚洲成熟少妇18 欧美www在线观看 | 免费黄色链接 | 男人的天堂手机在线 | 欧美成年人 | 黄色视屏在线免费观看 | 69亚洲| 天天天色综合 | 亚洲一区二区三区婷婷 | 国产成人综合av | 伊人青青 | 超碰666 | 男女午夜激情视频 | 一区二区乱码 | 欧美精品a区 | 亚洲国产欧美一区二区三区深喉 | 另类在线视频 | 精品无人区无码乱码毛片国产 | 日韩午夜在线播放 | 亚洲欧美综合久久 | 国产精品一区在线免费观看 | 国产福利片在线观看 | 久久99精品久久只有精品 | 亚洲xx在线 | 操人视频网站 | 精品久久无码视频 | 久久久久麻豆v国产精华液好用吗 | 国产乱码精品一区二区三区中文 | 日韩在线视频免费观看 | 九九热精品在线视频 | 女生扒开尿口给男生捅 | 69日本xxxxxxxxx30| 久人人 | 五月婷婷丁香六月 | 在线观看黄色小视频 | 欧洲一区二区三区 | 亚洲成人婷婷 | 国产suv精品一区二区四 | 国产视频网 | av三级网| 免费av黄色| 午夜国产 | a级片网站 | 国产性一乱一性一伧一色 | 水蜜桃色314在线观看 | 日韩一区二区三区精品 | 麻豆免费在线观看视频 | 国产视频资源 | 日韩高清在线观看 | 波多野结衣中文字幕在线播放 | 成人3d动漫一区二区三区 | 自拍偷拍国产精品 | 亚洲黄色激情 | 久久午夜无码鲁丝片 | 青青草视频播放 | 欧美黑人性受xxxx精品 | 九色91porny| gogo亚洲国模私拍人体 | 成人av综合 | 欧美毛片视频 | 性xxxx搡xxxxx搡欧美 | 中文在线字幕观看 | 人妻丰满熟妇av无码区hd | 人人超碰在线 | 丰满护士巨好爽好大乳 | 亚洲电影在线看 | 国产精品三级久久久久久电影 | 99自拍偷拍 | 中文字幕第27页 | 一级免费观看视频 | 青青草国产 | 欧美被狂躁喷白浆精品 | 超碰97av | 东北熟女一区二区三区 | 日本不卡视频在线播放 | 任你操精品 | 久色成人| 日韩三级中文字幕 | 成人123区| 日韩高清不卡一区 | 欧美日韩国产91 | 国产成人久久精品麻豆二区 |