-2

问题:http ://www.spoj.com/problems/EGYPIZZA/

很长一段时间以来,我一直在尝试解决这个“PIZZA”问题,我尝试了很多很多输入,它似乎在我的机器上运行良好,但在线法官一直拒绝接受 mu 代码,说它的答案是错误的! !请帮帮我......这是我的代码:

 #include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char str[4],b[3][4]= {"1/4","1/2","3/4"};
    unsigned int n, s = 1, count1 = 0, count2 = 0, count3 = 0;
    scanf("%u",&n);
    while(n--)
    {
        cin>>str;
        if(strcmp(str,b[0])==0)
            count2++;               
         else if(strcmp(str,b[1])==0)
             count1++;
         else if(strcmp(str,b[2])==0)
              count3++;
    }
    while(count3!=0 && count2!=0)
      {
               count2--; count3--; s++;
      }  
        if(count1%2!=0)
          if(count2/2!=0)
            {
                    count2-=2; count1--; s++;
            }   
            s = s + (count1/2) + (count1%2) + (count2/4) + (count2%4) + count3 ;
    printf("%u\n",s);
    return 0;
}

编辑:
根据您的建议,我已经更新了我的代码,请大家看看!!还是给错答案。。

4

2 回答 2

3

接受的解决方案:

#include<iostream>

using namespace std;

int main()
{
    string s;
    int n, sum = 1, count1 = 0, count2 = 0, count3 = 0, extra;
    cin >> n;
    for (int i=0; i < n; i++)
    {
        cin >> s;
        if (s == "1/2")count1 ++;
        if (s == "1/4")count2 ++;
        if (s == "3/4")count3 ++;
    }

    sum += count3 + count1/2.0 + 0.5;
    extra = count3 + (count1%2)*2;
    if (count2 >= extra)
    {
       count2 -= extra;
       sum += count2 / 4.0 + 0.75;
    }

    cout << sum << endl;

    return 0;
}

如果 aboTrika 不坚持让他的比萨饼和其他比萨饼一样,这个问题会更有趣。:)

于 2013-09-07T18:09:10.123 回答
1

您的程序有许多问题,例如使用简单计数器就足够的向量,以及使用适合整数运算的浮点数。也许最严重的问题是s = s + q/4 + h/2通过将四分之一比萨饼组合在一起并将半比萨饼组合在一起实际上满足了对 1/4 比萨饼的大多数请求的声明。相反,应首先使用 1/4 比萨的请求来补充尽可能多的 3/4 比萨请求,然后如果请求的半数为奇数则填充 1/2 比萨请求,然后才一起使用.

于 2013-09-07T16:16:21.633 回答