Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
测量好多数据都可以,怎么还是WA啊//首先是用6*6的装6*6的,然后用6*6的装5*5的再将剩余的空间装1*1的,再用6*6装4*4的, //剩余的空间先装2*2的如果还有空间剩余再装1*1.在6*6装3*3是重点,显示看装三个个数, //如果装的是4个那么没有空间剩余,如果装的三个3*3的那么可以装1个2*2的和5个1*1的, //如果装的是两个3*3的那么可以装2*2的3个和1*1的6个,还有3*3的1个的时候可以装2*2的五个其他的全装1*1的 #include<iostream> #include<cmath> #include<vector> int solve(int s[7]) { int total = 0; total += s[6];//6*6只能独自占用一个盒子 total += s[5]; //装5*5的 s[1] -= s[5]*11; if(s[1] < 0) s[1] = 0; total += s[4];//装4*4的 s[2] -= s[4] * 5;//剩余空间装2*2的 if(s[2] < 0)//如果还有多的,装1*1的 { int t = 4*(-s[2]); s[1] -= t; if(s[1] < 0) s[1] = 0; } if(s[3] > 0) { total += s[3]/4 + 1;//装3*3 switch(s[3]%4)//有剩余空间 { case 0: total -= 1; break; case 1: s[2] -= 5; s[1] -= 7; if(s[2] <= 0) { s[1] -= 4*(-s[2]); if(s[1] < 0) s[1] = 0; } break; case 2: s[2] -= 3; s[1] -= 6; if(s[2] <= 0) { s[1] -= 4*(-s[2]); if(s[1] < 0) s[1] = 0; } break; case 3: s[2] -= 1; s[1] -= 5; if(s[2] <= 0) { s[1] -= 4*(-s[2]); if(s[1] < 0) s[1] = 0; } default: break; } } if(s[2] > 0) { total += s[2]/9 + 1;//装2*2的 if(s[2]%9 == 0) total -= 1; else { s[1] -= (9 - s[2]%9)*4; if(s[1] < 0) s[1] = 0; } } if(s[1] > 0)//装1*1的 total += (int)ceil(1.0*s[1]/36); return total; } int main() { std::vector<int> resultvec; int s[7];//s[i]分别表示(i*i)的个数 while(1) { int i, sum = 0; for(i = 1; i <= 6; i++) { std::cin >> s[i]; sum += s[i]; } if(sum == 0)//输入全为零,终止 break; resultvec.push_back(solve(s)); } for(std::vector<int>::iterator it = resultvec.begin(); it != resultvec.end(); ++it) { std::cout << *it << std::endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator