在紀中的第八天,2017 7 14 總結

2021-09-30 14:02:30 字數 3129 閱讀 2024

2163. 【2017.7.12普及】演算法學習 (file io): input:sfxx.in output:sfxx.out時間限制: 1000 ms 空間限制: 262144 kb 具體限制 題目描述 自從學習了動態規劃後,famer kxp對動態規劃的熱愛便一發不可收拾,每天都想找點題做,一天,他找到了一道題,但是不會做,於是,他找到了你。題目如下: 給出n個無序不重複的數,再有m個詢問,每次詢問乙個數是否在那n個數中,若在,則ans增加2^k,k為該數在原數列中的位置。由於ans過大,所以只要求你輸出ans mod 10^9+7。輸入第一行,兩個數n,m,第二行n個數,第三行m個數。輸出 輸出最終答案。樣例輸入5 51 3 4 6 51 8 1 3 6樣例輸出24 資料範圍限制30% 0《n,m《10050% 0,n,m《10000100% 0《n,m《100000輸入的數均在2^31 以內解: 這題快速冪加二分查詢。 也可以打表加二分,反正都是滿分。打表需要打完所有的可能;既2的100以內的次方。快速冪就是一種神奇的演算法。。。

var

l,r,n,i,j,m,mid,p,ans:longint; a:

array[1

..100000,1

..2] of

longint; s:

array[0

..100000

] of

longint;

procedure

qsort

(x,y:longint)

;var

i,j,mid: longint; t:

array[1

..2] of

longint;

begin

i:=x;

j:=y;

mid:=a[x,1];

repeat

while

mid1

] do

dec(j);

while

mid>a[i,1]

doinc(i); if

i<=j

then

begin

t:=a[i];

a[i]:=a[j];

a[j]:=t;

inc(i);

dec(j);

end;

until

i>j; if

ithen

qsort(i,y); if

xthen

qsort(x,j);

end;

procedureaa;

begin

fori:=1

tom do

begin

read

(p);

l:=1;

r:=n;

while

ldo

begin

mid:=(l+r)

div2;

ifa[mid,

1]>=p

then

r:=mid

else

l:=mid+1;

end;

ifa[l,

1]=p

then

ans:=(ans+s[a[l,

2]])

mod1000000007;

end;

end;

begin

assign(input,

'sfxx.in');

reset(input);

assign(output,

'sfxx.out');

rewrite(output);

readln(n,m); s[

0]:=1;

fori:=1

ton do

begin

read

(a[i,

1]);

a[i,

2]:=i;

s[i]:=(s[i-1]*

2) mod1000000007;

end;

qsort(

1,n);

aa;writeln(ans);

end.

本題不提供打表程式(不解釋/滑稽)。今天又只寫了一題,不過我分享一種演算法。並查集: 我應該學過,but啦啦啦。我忘了。。

並查集是一種樹型的資料結構,用於處理一些不相交集合的合併問題。

(這句話,我承認不是我想的,是複製來的,不過說的很有道理。en); 並查集的主要操作有:

1-合併

兩個集合

2-查詢乙個單位;

3-壓縮路徑。

有三種操作:

1:合併兩個集合:

procedure hb(c,p:longint);//兩個集合的合併處

var

hong:longint;

lan:longint;

begin

hong:=getfather(c);

lan:=getfather(p); father[hong]:=father(lan);

end;

其實這也不算是完全合併,時間複雜度就省在只更新乙個點。

而要注意的是,getfather是乙個程式名,pascal不會自帶。

procedure getfather(x:longint);

begin

if father[x]=0 then getfather:=x else begin

getfather:=getfather(father[x]); father[x]:=getfather;

end;

end; 不知道有沒有錯誤,畢竟我才手打出來,(我一定會認真檢查程式!/斜眼笑);如果某位大神路過請看看啊啦啦啦。 接著是查詢(僅僅判斷在不在同一列(呸,好像叫集合吧啦啦)!!!):

function cz(x,y:longint):boolean;

begin

if getfather(x)=getfather(y)

then exit(true) //判斷在不在同乙個集合裡面。 else exit(false); //exit(***x)『***x』就是退出時函式所帶得值。 end; 大致是這樣的。。。。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

可能排版有問題,因為這個編輯器,咳咳。。。***

開課第八天

開課第八天,今天因為遲到問題被老師訓了,呵呵,說實話是真的感覺前一周有點懶散鬆懈,今天被訓之後又感覺到了緊迫感,嗯,堅持就是勝利,加油。上午講題,下午講新知識,以下就是本寶寶吸收的新養料 方法 可以被稱作函式,也可以被稱作功能。1 main 是我們學習的第乙個簡單的方法,public static ...

彙編第八天

彙編形式目標 main proc push ebp mov ebp,esp 建立堆疊框架 push offset msg 匯入引數位址 call printf 呼叫函式 xor eax,eax 返回0 pop epb 扯掉框架 ret 0 返回主程式 main endp 結束 1.條件語句 cmp ...

前端第八天

迴圈繫結的變數汙染 在進行事件迴圈變數繫結時,由於函式體內部 並未執行,在繫結結束後,呼叫函式時,賦予的部分變數失去意義,解決方案 給頁面元素新增乙個任意屬性 事件與已有的函式進行繫結 只需要將函式位址繫結給事件,事件繫結完成將會有系統在特定情況下自動觸發 物件 字典 的增刪改查 物件元素格式為字串...