标签:
B题:http://bailian.openjudge.cn/exam/1511/2/
这题wa了一次,后来理解清楚题意之后改对了,
分析六个型号的产品占用箱子的具体情况如下:6*6 的产品每个会占用一个完整的箱子,并且没有空余空间;5*5 的产品每个占用一个新的箱子,并且留下11 个可以盛放1*1的产品的空余空间;4*4 的产品每个占用一个新的箱子,并且留下5 个可以盛放2*2 的产品的空余空间;3*3 的产品情况比较复杂,首先3*3 的产品不能放在原来盛有5*5 或者4*4 的箱子中,那么必须为3*3 的产品另开新的箱子,新开的箱子数目等于3*3 的产品的数目除以4 向上取整;同时我们需要讨论为3*3 的产品新开箱子时,剩余的空间可以盛放多少2*2 和1*1 的产品(这里如果有空间可以盛放2*2 的产品,我们就将它计入2*2 的空余空间,等到2*2 的产品全部装完,如果还有2*2 的空间剩余,再将它们转换成1*1 的剩余空间)。我们可以分情况讨论为3*3 的产品打开的新箱子中剩余的空位,共为四种情况:第一种,3*3 的产品的数目正好是4 的倍数,所以没有空余空间;第二种,3*3 的产品数目是4 的倍数加1,这时还剩5 个2*2 的空位和7 个1*1 的空位;第三种,3*3 的产品数目是4 的倍数加2,这时还剩3 个2*2 的空位和6 个1*1 的空位;第四种,3*3 的产品数目是4 的倍数加3,这时还剩1 个2*2 的空位和5 个1*1 的空位;处理完3*3 的产品,就可以比较一下剩余的2*2的空位和2*2 产品的数目,如果产品数目多,就将2*2 的空位全部填满,再为2*2 的产品打开新箱子,同时计算新箱子中1*1 的空位,如果剩余空位多,就将2*2 的产品全部填入2*2的空位,再将剩余的2*2 的空位转换成1*1 的空位;最后处理1*1 的产品,比较一下1*1的空位与1*1 的产品数目,如果空位多,将1*1 的产品全部填入空位,否则,先将1*1 的空位填满,然后再为1*1 的产品打开新的箱子。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<vector> 6 using namespace std; 7 int a1,a2,a3,a4,a5,a6; 8 int main() 9 { 10 int n;//盒子数目 11 int x;//1*1盒子数 12 int y;//2*2盒子数 13 int t[4]={0,5,3,1};//3*3可以容纳2*2的个数 14 while(cin>>a1>>a2>>a3>>a4>>a5>>a6) 15 { 16 n=0; 17 if(a1==0&&a2==0&&a3==0&&a4==0&&a5==0&&a6==0) 18 break; 19 n+=a6+a5+a4+(a3+3)/4; 20 y=5*a4+t[a3%4]; 21 if(a2>y) 22 n+=(a2-y+8)/9; 23 x=36*n-36*a6-25*a5-16*a4-9*a3-4*a2; 24 if(a1>x) 25 n+=(a1-x+35)/36; 26 cout<<n<<endl; 27 } 28 return 0; 29 }
C题:http://bailian.openjudge.cn/exam/1511/3/
这题很水的一道题,就不写题解了,直接贴代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<cmath> 6 using namespace std; 7 const int maxn=101; 8 int a[maxn]; 9 int main() 10 { 11 int t; 12 int n; 13 cin>>t; 14 while(t--) 15 { 16 cin>>n; 17 memset(a,0,sizeof(a)); 18 for(int i=1;i<=n;i++) 19 { 20 for(int j=i;j<=n;j++) 21 if(j%i==0) 22 a[j]=!a[j]; 23 } 24 int cnt=0; 25 for(int i=1;i<=n;i++) 26 if(a[i]) 27 ++cnt; 28 cout<<cnt<<endl; 29 } 30 }
标签:
原文地址:http://www.cnblogs.com/wolf940509/p/4637812.html