2020 計蒜之道 預賽 第一場

2021-10-09 12:31:24 字數 1502 閱讀 3762

思路:模擬題(考慮全面即可)

第一步:判斷先手和後手,兩棋子相差一定是≤1,當相等時,黑子x先走。

第二步:暴力判斷每個空白處,填充相應棋子,能不能湊齊五子連珠。(橫,豎,撇,捺)

說明:黑子先走,棋盤上只會出現黑子》=白子的情況(當時只考慮黑子先走,一首涼涼送給自己)

**:

#includechar map[26][26];

bool dfs(int i,int j,char tmp)

for(int ii=i-1;ii>=1;ii--)

num=0; //行

for(int jj=j+1;jj<=25;jj++)

for(int jj=j-1;jj>=1;jj--)

num=0; //撇

for(int ii=i-1,jj=j+1;ii>=1&&jj<=25;ii--,jj++)

for(int ii=i+1,jj=j-1;ii<=25&&jj>=1;ii++,jj--)

num=0; //捺

for(int ii=i-1,jj=j-1;ii>=1&&jj>=1;ii--,jj--)

for(int ii=i+1,jj=j+1;ii<=25&&jj<=25;ii++,jj++)

return false;

}int main()

getchar();

}char tmp=(x_num<=o_num)?'x':'o';//當前不可能出現已經勝利的一方,如果棋盤上的棋子一樣,則x先,否則的話誰少誰先。

int flag=1;

for(int i=1;i<=25;i++)}}

}if(flag==1) printf("tie\n");

}

思路:

第一步:首先很明確,修改的區間不會出現交叉,難度大大降低

第二步:在不替換的情況下,每個點肯定塗黑和白最大值,並計算出字首和(max_sum)

第三步:全塗黑色,需要計算乙個字首和,全圖白色需要計算乙個字首和(能快速求出某一段的值)(aa和bb)

第四步:根據m組替換規則,計算要不要替換。

不替換的某一段的值為:max_sum[e]-max_sum[s-1]

替換的某一段的值為:xx[e]-xx[s-1]+t  (xx為aa或bb)

注意哈:[s,e]區間=(前e項和)-(前s-1項和)

**:

#includelong long int aa[300005];

long long int bb[300005];

long long int max[300005];

long long int max_sum[300005];

int main()

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

long long int ans=max_sum[n];

for(int i=1;i<=m;i++)else

}printf("%lld\n",ans);

}

2020 計蒜之道 預賽 第一場 A B

列舉每個空格點的位置,然後判水平垂直以及兩條對角線即可。判的時候可以沿那個方向往兩邊走,有連續棋子多於4個的話就獲勝。include using namespace std int n 24 char mmap 30 30 char go struct point vectorv bool tran...

2017 計蒜之道 初賽 第一場

阿里的新遊戲 阿里九遊開放平台近日上架了一款新的益智類遊戲 成三棋。成三棋是我國非常古老的乙個雙人棋類遊戲,其棋盤如下圖所示 如果一條線段上的三個交叉點都被同一玩家的棋子佔據的話,則稱這條線段被該玩家成三。現在,小紅和小明兩人在遊戲平台上下棋,其中小紅的棋子是黑色的。請你幫小紅計算他成三的線段數。樣...

2018 計蒜之道 初賽 第一場

題解 典型的二分 1 pragma warning disable 4996 2 include3 include4 include 5 include6 include7 include8 include9 define ll long long 10using namespace std 111...