GDOI2016模擬8 8處理器

2021-07-04 12:24:35 字數 1520 閱讀 5509

題目

你有乙個微型處理器,處理器有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...