杭州集訓第五天

2022-07-31 07:24:14 字數 3731 閱讀 2156

今天是我在杭州集訓(挨虐)的第五天,題目一如既往的easy,我一如既往的cai;

所以,我還是沒有做出題目;話不多說,上題目

有乙個n*n 的王國城堡地圖上,皇后 喜歡看騎士之間的戰鬥,於是他準備布置 m個騎士

,其中 每乙個騎士都可以向 個方向,上、下、左、右、左上、左下、右上、右下移動若干距離。

且每乙個騎 士都可以攻擊他八個方向上離它最近的騎士。 皇后 等不及看騎士之間的對決,但他又擔心騎士的安危,

她想提前知道每乙個騎士會被從幾個方 向攻擊到,設為 s。很顯然s 屬於[0,8] 。

最後要求出來 , num[0],num[1]…num[8] 九個數,表示有 多少騎士被攻擊到 0次, 1次…… 8次。 資料保證 個騎士中任意兩個不在同乙個位置。

第一行兩個正整數 n,m, ( n,m<=100000),

然後接下來 m行,每一行乙個x[i[,y[i] , 分別表示第 i個騎士的 橫座標和縱座標,1<=x[i],y[i]<=n。

一行 9個整數,分別為num[0],num[1]...num[8] ,兩個數中間用空格隔開。

8 44 3

4 86 5

1 60 3 0 1 0 0 0 0 0

對於 30%的資料n,m<=1000 。

對於60%的資料n<=100000,m<=1000 。

對於100%的資料n,m<=100000,1<=x[i],y[i]<=n 。

這題我在比賽的時候是打了乙個暴力,可惜打的不好只有20分;

其實這題打暴力是可以拿60分的,具體怎麼寫我就不說了;

正解:我們可以在輸入的時候找到每一行的y的最大值和最小值以及每一列的x的最大值和最小值;

因為在同一行x相等,在同一列y相等;

然後是斜線,我們通過畫圖可以發現,從右上到左下的斜線上x+y相等;

從左上到右下的x-y的值相等,但要注意:要加上乙個n,防止出現負數;

然後我們就可以和行和列的處理一樣,處理斜邊上的最大和最小值;

可以用x也可以用y來處理;

然後跑每乙個點判斷它是否為最大或最小值;

不是則說明它的行或列有其他的騎士;

話不多說:上**!!!

#includeusing

namespace

std;

long

long

n;long

long

ans;

long

long a[1000005

];int

main()

for(int i=1;i)

else

}ans+=(long

long)a[n]*(n-a[n]+1

); cout

<

return0;

}

千古神犇邵徐坤 ,他現在利用自己猴子的屬相變成了 n個會打籃球的分身,

每個會打籃球的分身都 有乙個雞兒你真美值,這些分身是亂序的。

你需要將其按雞兒你真美值從小到大排序,每次你可以將乙個分身揪到任意乙個位置(某兩個分身中 間),

代價是你要掉該分身的雞兒你真美值的毛。 為了不變成sxk這樣的聰明"絕頂"的大猴子,

你要以盡量少的代價完成這個任務,你需要回答每一次sxk分身後你會掉的最少毛數。

從檔案pick.in 中讀入資料。

資料的第1 行包含乙個非負整數 t 表示 sxk分身的次數。對於 的資料滿足對於每一組資料

第 1 行包含乙個非負整數 n表示sxk分身的個數

第2 行包含 n個數,ai

表示第 i個分身的雞兒你真美值

輸出到檔案pick.out 中。

對於每乙個詢問輸出乙個整數,表示你最少會掉的毛數;25

9 5 7 2 8

57 6 5 4 3

18對於 30%的資料滿足:∑ n<=1000;

對於另外30% 的資料滿足:ai>=ai+1;

對於 100%的資料滿足:∑ n<=20000,ai<=10^7;

這題其實有60分是良心送分,對於前30%的資料,我們可以轉換一下題意,

得到題目就是讓我們刪去一些數,得到乙個權值最大的單調遞增的序列;

然後我們不難發現如果答案要最優,那麼乙個數最多只會被移一次;

所以我們就可以用dp來做,定義乙個f陣列

表示以 i 結尾

的上公升序列的最大權值;

對於另外的30%的資料可以特判過掉;

最後的資料,我們考慮優化之前的dp,那麼,我們可以用·線段樹來維護f陣列;

每做一次f就把他加入樹上維護,這道題目就變成了單點修改,區間查詢的dp題了

**如下:

#includeusing

namespace

std;

intn,t;

struct

treee[

4000000

];map

q;long

long a[1000000

];long

long b[1000000

];long

long

ans;

long

long

sum;

long

long c[1000000

];int

cnt;

intread()

while(w>='

0'&&w<='9'

)

return

ch;}

void build(int q,int l,int

r)void add(int q,int l,long

long

val)

int mid=(e[q].l+e[q].r)>>1

;

if(mid>=l) add(q*2

,l,val);

if(mid2+1

,l,val);

e[q].dat=max(e[q*2].dat,e[q*2+1

].dat);

}long

long ask(int q,int l,int

r)int

main()

build(

1,1,n);

sort(b+1,b+1+n);

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

c[i]=q[a[i]];

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

q[a[i]]=0

; cnt=0

; cout

}return0;

}

已知常數 n, k,p 和函式

從檔案 prefix .in中讀入資料。

資料的第 1行包含三個非負整數 n, k,p意義如題目描述。

輸出到檔案prefix.out  中。輸出一行乙個正整數, 可能為分數,所以輸出

對 p 取模的結果。

即 輸出

這題我在考試的時候沒寫出來,後來隔壁大佬教了我我也不會;

於是,這題我沒寫出來,如果有會寫的大佬,希望能講一下做法;

如果大家覺得我寫的還可以的話,點個贊吧~~~

集訓第五天

今天學習了乙個快速指數冪取餘的演算法。就拿一道題來說明 description 上初中的時候我們就學會了冪乘運算,可是我們卻不知道對於高階的冪乘,出結果的方法比較慢,那麼你有什麼更好的方法嗎?input 第1行,乙個整數n 1 n 1000 表示要計算的資料組數 第2 n 1行,每行兩個整數,第1個...

集訓ing 第五天

昨天太累了,回武漢後感覺不舒服,第二天就感冒了,然後天天呆在機房寫文件,搞需求分析,沒有好好休息。終於一直打噴嚏,咳嗽。昨天晚上下班後,就和朱一起去藥房買了感冒藥。回宿舍吃過藥,洗完澡就睡覺了,多日以來最早的一次。今天起來感覺就好多了,不知道是不是藥的原因。不管怎麼樣,感覺好點就是好事。從昨天開始一...

國慶第五天

直接在寢室待了乙個上午 一 matlab 試了一下昨天安裝的matlab2010b發現檔案都打不開,報這個錯 undefined function or method uiopen for input arguments of type char 二 c 1.找到了個之前 裡的乙個問題 把本週開頭和...