CodeForces 26 C.Parquet(构造)
2017-12-23 13:13
246 查看
Description
用a个1×2的,b个2×1的和c个2×2的砖铺n×m的地板,问是否存在一个合法方案
Input
五个整数n,m,a,b,c(1≤n,m≤100,0≤a,b,c≤104)
Output
如果存在合法方案则输出(用相同字母表示一块砖,相邻的不同的砖用不同字母),否则输出IMPOSSIBLE
Sample Input
2 6 2 2 1
Sample Output
aabcca
aabdda
Solution
构造题,n,m均为奇数显然不行,有一个是奇数则看用对应的1×2或2×1的砖能否把多出的一列或一行铺满然后变成都是偶数的情况,都是偶数时就看砖的数量够不够了(此时1×2和2×1的砖两两凑成2×2的)
Code
用a个1×2的,b个2×1的和c个2×2的砖铺n×m的地板,问是否存在一个合法方案
Input
五个整数n,m,a,b,c(1≤n,m≤100,0≤a,b,c≤104)
Output
如果存在合法方案则输出(用相同字母表示一块砖,相邻的不同的砖用不同字母),否则输出IMPOSSIBLE
Sample Input
2 6 2 2 1
Sample Output
aabcca
aabdda
Solution
构造题,n,m均为奇数显然不行,有一个是奇数则看用对应的1×2或2×1的砖能否把多出的一列或一行铺满然后变成都是偶数的情况,都是偶数时就看砖的数量够不够了(此时1×2和2×1的砖两两凑成2×2的)
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; typedef pair<int,int>P; const int INF=0x3f3f3f3f,maxn=110; char s[maxn][maxn]; int n,m,a,b,c; char get(int i,int j) { for(char c='a';c<='z';c++) if(c!=s[i-1][j]&&c!=s[i][j-1]&&c!=s[i-1][j+1]&&c!=s[i+1][j-1])return c; } int Solve() { int nn=0,mm=0; if(n&1) { if(m&1)return 0; if(a<m/2)return 0; a-=m/2; for(int j=1;j<m;j+=2)s[1][j]=s[1][j+1]=get(1,j); nn++; } else { if(m&1) { if(b<n/2)return 0; b-=n/2; for(int i=1;i<n;i+=2)s[i][1]=s[i+1][1]=get(i,1); mm++; } } if(a/2+b/2+c<(n-nn)*(m-mm)/4)return 0; for(int i=nn+1;i<n;i+=2) for(int j=mm+1;j<m;j+=2) { if(a>=2) { a-=2; s[i][j]=s[i][j+1]=get(i,j); s[i+1][j]=s[i+1][j+1]=get(i+1,j); } else if(b>=2) { b-=2; s[i][j]=s[i+1][j]=get(i,j); s[i][j+1]=s[i+1][j+1]=get(i,j+1); } else s[i][j]=s[i+1][j]=s[i][j+1]=s[i+1][j+1]=get(i,j); } return 1; } int main() { while(~scanf("%d%d%d%d%d",&n,&m,&a,&b,&c)) { if(Solve()==0)printf("IMPOSSIBLE\n"); else { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++)printf("%c",s[i][j]); printf("\n"); } } } return 0; }
相关文章推荐
- codeforces 487C C. Prefix Product Sequence(数论+构造)
- CodeForces 673D Bear and Two Paths(构造)
- Codeforces 549B. Looksery Party[构造]
- codeforces 225B B. Well-known Numbers(数论+二分+贪心+构造)
- Codeforces 489C 简单构造
- Codeforces 639B——Bear and Forgotten Tree 3——————【构造、树】
- [欧拉回路 构造 || 网络流] Codeforces 723E #375 (Div. 2) E. One-Way Reform
- codeforces 743-C. Vladik and fractions(构造)
- CodeForces 778D Parquet Re-laying 构造
- 【瞎搞】 Codeforces 460D Little Victor and Set 位运算构造
- CodeForces 740C Alyona and mex 简单构造题
- CodeForces 550E Brackets in Implications(构造)
- codeforces 486C Palindrome Transformation 贪心求构造回文
- Codeforces 459C Pashmak and Buses(构造)
- Codeforces Round #347 (Div. 2) B. Rebus (codeforces 664b) (构造)
- codeforces 359E Neatness(DFS+构造)
- CodeForces - 848A From Y to Y(构造)
- CodeForces - 540B School Marks (构造)
- Codeforces 544B - Sea and Islands(构造)
- Codeforces 862C(构造)