蒜頭君打地鼠

2022-04-30 06:06:09 字數 1512 閱讀 5553

蒜頭君最近迷上了打地鼠,但他發現同時出現在面板上的地鼠太多,於是他想改進一下他的錘子,於是他拿出了一款 k×k 大小的正方形錘子,但是遺憾的是,這個錘子只能斜著砸。如下圖所示:

當 k=2 時,若蒜頭君敲擊黑點,黑點和圖中所有藍色點將一併被敲到。

當 k=3時,錘子的圖案如下所示:

k 取其他值時以此類推。

注意:蒜頭君只能敲擊面板上的格仔,但錘子不一定要全部落在面板內。

現在給定乙個 n×n 的面板,每個格仔可能有地鼠也可能沒有地鼠,請程式設計計算用 k×k 大小錘子敲擊時最多能打中多少地鼠。

第一行 2 個整數 n,k,表示面板大小和錘子大小。

接下來 n行,每行 n 個整數,若為 1 代表該格仔有地鼠,若為 0 代表該格仔無地鼠。不會出現其他的數字。

輸出乙個整數,代表最多能砸到的地鼠數。

對於 50% 的測試資料,滿足1≤n≤300,1≤k≤10;

對於 80% 的測試資料,滿足1≤n≤2000,1≤k≤10;

對於 100% 的測試資料,滿足 1≤n≤2000,1≤k≤100。

這兩天被對角線字首和玩死了。。

將原圖翻轉

藍色的為原圖,斜著看的為新圖,對應的座標畫圖玩一玩就出來了

注意如果直接統計新圖以某點為右下角的正方形數量,有些點是不需要的。

code:

#include int max(int x,int y)

const int n=4010;

int f[n][n],n,k;

int cali(int i,int j)

int calj(int i,int j)

int cal(int i,int j)

int main()

n=(n<<1)-1,k=(k<<1)-1;

int ans=0;

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

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

f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];

int typ=!(((n+1>>1)&1)^1);

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

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

if((i&1)^(j&1)^typ)

ans=max(ans,cal(i,j));

int d=cal(5,5);

printf("%d\n",ans);

return 0;

}

2018.6.23

蒜頭君打地鼠

蒜頭君打地鼠 蒜頭君最近迷上了打地鼠,但他發現同時出現在面板上的地鼠太多,於是他想改進一下他的錘子,於是他拿出了一款 k times kk k 大小的正方形錘子,但是遺憾的是,這個錘子只能斜著砸。如下圖所示 當 k 2k 2 時,若蒜頭君敲擊黑點,黑點和圖中所有藍色點將一併被敲到。當 k 3k 3 ...

蒜頭君面試

題目 問題描述 蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數n 1 n 100000 接下來一行輸入n個 int 範圍內的整數。輸出格式 ...

蒜頭君下棋

蒜頭君下棋 共一行,兩個整數nn和mm 1 leq n m leq 10001 n,m 1000 代表棋盤一共有 nn 行 mm 列。輸出乙個整數,代表棋盤上最多能放的馬的數量。樣例輸入1複製 2 4樣例輸出1複製 4樣例輸入2複製 3 4樣例輸出2複製 6 1 當棋盤只有一行時,棋盤上全放上棋子即...