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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

14/10/校内测试{天天考,丧心病狂}

發(fā)布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 14/10/校内测试{天天考,丧心病狂} 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1,
給定平面上n個OIer和n臺電腦,每個OIer只能水平向右和豎直向下,找到一臺電腦寫代碼,其花費(fèi)為OIer與電腦之間的曼哈頓距離(|x_i-x_j|+|y_i-y_j|)。

求出使n個OIer均找到自己電腦的最小花費(fèi)。
輸入輸出格式?Input/output
輸入格式:
輸入第1行有一個整數(shù)n,表示點的個數(shù)。
接下來有n行,第i行包括兩個用空格隔開的整數(shù)x_i,y_i,表示第i個OIer的位置;
接下來有n行,第i行包括兩個用空格隔開的整數(shù)x_i,y_i,表示第i臺電腦的位置。
輸出格式:
輸出1個整數(shù),表示最小花費(fèi)。 輸入輸出樣例?Sample input/output 輸入樣例:
2 1 2 1 3 2 2 2 3 輸出樣例:
2
說明?description
對于樣例,第一個OIer尋找到第一臺電腦,第二個OIer尋找到第二臺電腦。
最小花費(fèi)為|2-1|+|2-2|+|2-1|+|3-3|=2。

對于30%的數(shù)據(jù),保證2≤n≤50;
對于60%的數(shù)據(jù),保證2≤n≤10^3;
對于100%的數(shù)據(jù),保證2≤n≤5×10^4,0≤x_i≤100000,0≤y_i≤100000。
對于100%的數(shù)據(jù),保證一定有解。

可以發(fā)現(xiàn),不管oier與computer的對應(yīng)順序如何,結(jié)果相同。
code:
var i,j,n:longint;
x1,x2,y1,y2:int64;
a,b:int64;
begin readln(n);
x1:=0; y1:=0;
x2:=0; y2:=0;
for i:=1 to n do
begin readln(a,b);
x1:=x1+a;
y1:=y1+b;
end;
for i:=1 to n do
begin readln(a,b);
x2:=x2+a;
y2:=y2+b;
end;
writeln(abs(x2-x1)+abs(y1-y2));
end.

2,
題目描述?Description
OI教練BG在n天中每天早晨會給wxjlzbcd發(fā)一套題,其中包含A_i道題目。如果不做的話,題目會累加到下一天。
wxjlzbcd每天能夠刷掉的題目數(shù)量為B_i,BG的題目數(shù)量太少,可能不能滿足wxjlzbcd每天刷題的需求,如果題目數(shù)量不夠,wxjlzbcd當(dāng)天就不會刷題,因為空出來的時間他有可能會浪費(fèi)掉。

但是wxjlzbcd不想天天頹廢,他想知道自己最多能有多少天有題刷。
?輸入輸出格式?Input/output
輸入格式:
輸入第1行為一個整數(shù)n,表示天數(shù)。
第2行包括n個數(shù)字A_i,表示BG n天中每天發(fā)的題目數(shù)A_i。
第3行包括n個數(shù)字B_i,表示wxjlzbcd n天中每天能刷掉的題目數(shù)B_i。
輸出格式:
輸出第1行為一個整數(shù)ans,表示天數(shù)。
輸入輸出樣例?Sample input/output
樣例測試點#1
輸入樣例:?
5
1 4 1 2 3
1 2 3 4 5
輸出樣例:
4
?說明?description
對于40%的數(shù)據(jù),保證1≤n≤1000;
對于100%的數(shù)據(jù),保證1≤n≤250000,0≤a_i≤10^9,0≤b_i≤10^9。

神奇的貪心:
如果能刷題的話就刷;否則就判斷以前的每天中有沒有需要題數(shù)比當(dāng)前大的,然后還原,取當(dāng)前的。
用堆維護(hù)。。。。。。。。
code:

var n,left,day,total:int64;
i:longint;
num:array[1..250000] of int64;
demand:array[1..250000] of int64;
heap:array[1..250000] of int64;
procedure go_up(st,j:longint);
var i,temp:longint;
begin while (j div 2)>=st do
begin i:=j>>1;
if demand[heap[j]]>demand[heap[i]]
then begin emp:=heap[i];
heap[i]:=heap[j];
heap[j]:=temp;
j:=i;
end
else break;
end;
end;

procedure go_down(i,ed:longint);
          var j,temp:longint;
begin
while (i<<1)<=ed do
begin
j:=i<<1;
if demand[heap[j+1]]>demand[heap[j]] then j:=j+1;
if demand[heap[j]]>demand[heap[i]]
then
begin
temp:=heap[i];
heap[i]:=heap[j];
heap[j]:=temp;
i:=j;
end
else
break;
end;
end;
begin readln(n);
for i:=1 to n do
read(num[i]);
readln;
for i:=1 to n do
read(demand[i]);
left:=0;
day:=0;
total:=0;
for i:=1 to n do
begin if left+num[i]>=demand[i]
then begin inc(day);
left:=left+num[i]-demand[i];
inc(total);
heap[total]:=i;
go_up(1,total);
end
else begin if demand[heap[1]]>=demand[i]
then begin left:=left+num[i]+demand[heap[1]]-demand[i];
heap[1]:=i;
go_down(1,total);
end
else left:=left+num[i];
end;
end;
write(day);
end.

3, 題目描述?Description 給出n個正整數(shù),Archon、wxjlzbcd兩個人輪流取任意數(shù)量的數(shù),游戲的結(jié)束條件是n個數(shù)都被取走。
每次取數(shù)時,獲得的得分為所取數(shù)中的最小值。
假設(shè)Archon先取數(shù),Archon和wxjlzbcd的策略都是盡可能使得自己的得分減去對手的得分更大,請求出游戲結(jié)束時Archon的得分減去wxjlzbcd的得分為多少。 輸入輸出格式?Input/output 輸入格式:
輸入第1行為一個整數(shù)n,表示整數(shù)個數(shù)。
輸入第2行為給出的n個整數(shù)a_i。
輸出格式:
輸出第1行為一個整數(shù)ans,表示Archon的得分減去wxjlzbcd的得分。 輸入輸出樣例?Sample input/output 輸入樣例:?
3 1 3 1 輸出樣例:
2
?說明?description
對于樣例,Archon取走第二個數(shù),wxjlzbcd取走第一個和第三個數(shù)。答案為3-1=2。
對于30%的數(shù)據(jù),1≤n≤10;
對于100%的數(shù)據(jù),1≤n≤1000000,1≤a_i≤10^9。

設(shè)f[i]為剩最小的i個數(shù)時前手與后手的最大差值
此時,假設(shè)前手取了j個數(shù){0<=j<=i-1}
前手的增加得分:init[j]
后手的增加得分:f[j-1];
f[i]:=max{init[j]-f[j-1]} (0<=j<=i-1)
f[0]:=1;

要先qsort
{在最外層時,不要用head<=tail
而是head<tail
}
因為1≤n≤1000000,則要在每一次求值時不斷更新。{prevent TLE}
code:
var n:longint;
i,j,k:longint;
f,init:array[0..1000000]of longint;
max:longint;
procedure qsort(x,y:longint);
var head,tail,k,temp:longint;
begin head:=x; tail:=y;
k:=init[(head+tail) div 2];
while head<tail do
begin while init[head]<k do inc(head);
while k<init[tail] do dec(tail);
if head<=tail
then begin temp:=init[head];
init[head]:=init[tail];
init[tail]:=temp;
inc(head);
dec(tail);
end;
end;
if head<y then qsort(head,y);
if x<tail then qsort(x,tail);
end;
begin readln(n);
for i:=1 to n do
read(init[i]);
qsort(1,n);
f[0]:=0;
max:=init[1]-f[0];
for i:=1 to n-1 do
begin f[i]:=max;
if max<init[i+1]-f[i]
then max:=init[i+1]-f[i];
end;
f[n]:=max;
writeln(f[n]);
end.

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

總結(jié)

以上是生活随笔為你收集整理的14/10/校内测试{天天考,丧心病狂}的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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