jzoj6375-华灵「蝶妄想」【结论题】
生活随笔
收集整理的這篇文章主要介紹了
jzoj6375-华灵「蝶妄想」【结论题】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
題目大意
n?mn*mn?m填(((或者)))。求一個方案使得最多的行和列匹配。
解題思路
我們先考慮nnn或mmm為奇數(shù),那么顯然奇數(shù)的肯定不必配,那么就只需要考慮行或列即可。
若nnn和mmm都為偶數(shù)時
我們發(fā)現(xiàn)在邊邊的行列不可能都匹配上,那就讓他們無私奉獻一下,那么除了這幾行就都可以匹配上
Suchas:Such\ as:Such?as:
匹配數(shù)為n+m?4n+m-4n+m?4
當(dāng)然我們也可以犧牲一般的行(或列)使得最邊邊的列(或行)匹配上,
Suchas:Such\ as:Such?as:
匹配數(shù)為n2+m?1\frac{n}{2}+m-12n?+m?1
判斷一下哪種更優(yōu)即可。
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; bool v[5001][5001],sw; int main() {//freopen("butterfly.in","r",stdin); // freopen("butterfly.out","w",stdout);scanf("%d%d",&n,&m);if(m&1){int k=1;for(int i=1;i<=n;i++){k^=1;for(int j=1;j<=m;j++)putchar(k?')':'(');putchar('\n');}}else if(n&1){for(int i=1;i<=n;i++){int k=1;for(int j=1;j<=m;j++){k^=1;putchar(k?')':'(');}putchar('\n');}}else{ if(n>m) sw=1,swap(n,m);if(n+m-4<n/2+m-1){for(int i=1;i<=m;i++)v[1][i]=1,v[n][i]=0;int z=0;for(int i=2;i<n;i++){int k=z;z^=1;for(int j=1;j<=m;j++)v[i][j]=(k^=1);}}else{for(int i=1;i<=m;i++)v[1][i]=1,v[n][i]=0;int z=0;for(int i=2;i<n;i++){int k=z;z^=1;v[i][1]=1;v[i][m]=0; for(int j=2;j<m;j++)v[i][j]=(k^=1);}}if(!sw){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)putchar(v[i][j]?'(':')');putchar('\n');}}else{for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)putchar(v[j][i]?'(':')');putchar('\n');}}} }總結(jié)
以上是生活随笔為你收集整理的jzoj6375-华灵「蝶妄想」【结论题】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cto是什么职位 cto的简介
- 下一篇: 增强萨满天赋攻略 有什么好玩的技巧