題目
你有乙個微型處理器,處理器有n個暫存器,編號為1到n,每個暫存器用二進位制儲存乙個32位無符號整數(取值範圍為0到2^32-1)。儲存器能執行以下操作:
指令 描述 example
1 k m 把暫存器k裡面的數字向右旋轉m位,再把結果寫進暫存器k。 00000000000000000010001111111011
→ (m = 1010) → 11111110110000000000000000001000
(十進位制下: 9211 → (m = 10) → 4 273 995 784)
2 k l 把暫存器k和l中的值進行異或運算,結果輸出到系統匯流排中。 00000000000000000000001111000111
xor 00000000000001111100000000000111
= 00000000000001111100001111000000
(十進位制下: 967 xor 507 911 = 508 864)
如果有多種解,輸出字典序最小的解(如果兩組解的前k-1個暫存器值相同,第k個暫存器不同,則第k個暫存器的值較小的解字典序更小)。
這題我們可以將每個暫存器的每一位抽出來考慮相互的關係,對於旋轉操作,我們可以維護起始指標位置來還原回去後一一對應考慮。
然後用並查集做。
由於會有後效性,而且不能保證字典序最小,我們不能通過一開始決定x屬於1或屬於0,但可以通過維護x與其並查集頂部位的數是否相同來做。
對於x和y間的關係,若x和y在同乙個並查集裡,那麼若x與y不同,而x與並查集頂部相同,y與並查集頂部也相同,則輸出nema(還有x與y相同,同理可推)
若x和y在不同並查集裡,那麼我們通過x與y的關係,以及x與其並查集頂部的關係,和y與其並查集頂部的關係,推得將兩個並查集頂部合併時連邊的權值,若為1,則說明兩個頂部不同,為0則相同。(動手推一下)
這些權值在getfather時迭代加起來,得到x與頂部是否相同。(奇數為不同,偶數為相同)
最後求答案,從高位列舉,看一下其所在並查集是否已確定,確定了的話,直接按限制得出,反之為0,然後按限制強制將頂部賦值。
貼**
#include
#include
#include
#define n 100001
using
namespace
std;
int n,m;
int fa[n*32][2],s[n];
long
long help[32];
bool bz[n*32],ans[n*32];
bool p;
void pre()
int get(int x)
void init()
s[y]=(s[y]+1)%32;
s[z]=(s[z]+1)%32;
}}
}}void write()
y+=ans[x]*help[j-1];
}printf("%lld ",y);
}}int main()
GDOI2016模擬8 8旋轉
alice和bob發明了乙個新的旋轉遊戲。首先,bob給定n個數組成的序列,並把該序列平均分配成若干個塊,每塊正好包含k個數 k能整除n 第一塊由第1到第k個數構成,第二塊由第k 1個數到第2k個數構成,以此類推。接著,bob要求alice對這個序列進行一系列操作,操作有以下兩種 1.把每塊裡面的數...
8086 8088 處理器結構
8088共有8個通用暫存器,1個標誌暫存器 4個段暫存器和1個指令指標暫存器。一 通用暫存器 資料暫存器 共ax bx cx dx四個,每個暫存器即可作為16位暫存器,又可拆分為兩個8位暫存器,此時記為ah al bh bl等。ax ah al 累加器accumulator bx bh bl 基址暫...
4 處理器排程
4.1 cpu排程的相關概念 cpu排程 按照一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序,其任務就是控制 協調程序對cpu的競爭。如果沒有就緒程序,系統會安排乙個系統空閒程序或idle程序。cpu排程所面臨的場景 系統中有n個程序,等待上cpu執行,而有m個cpu,m...