今天是我在杭州集訓(挨虐)的第五天,題目一如既往的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千古神犇邵徐坤 ,他現在利用自己猴子的屬相變成了 n個會打籃球的分身,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;
}
每個會打籃球的分身都 有乙個雞兒你真美值,這些分身是亂序的。
你需要將其按雞兒你真美值從小到大排序,每次你可以將乙個分身揪到任意乙個位置(某兩個分身中 間),
代價是你要掉該分身的雞兒你真美值的毛。 為了不變成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已知常數 n, k,p 和函式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;
}
從檔案 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.找到了個之前 裡的乙個問題 把本週開頭和...