C++ 在C+中有什么技巧可以处理非常大的输入吗+;?

C++ 在C+中有什么技巧可以处理非常大的输入吗+;?,c++,C++,一个班级去学校旅行。和往常一样,N个孩子的背包里都塞满了糖果。但很快,争吵就开始了,因为有些孩子比其他孩子吃的糖果多。很快,老师意识到他必须介入:“大家听着!把你们所有的糖果都放在这张桌子上!” 很快,老师的桌子上有一大堆糖果。“现在,我将把糖果分成N个相等的堆,每个人都会得到一个。”老师宣布 “等等,这真的有可能吗?”一些聪明的孩子想知道 问题说明 你会得到每个孩子带来的糖果数量。找出老师是否能将糖果分成N个完全相等的堆。(在本任务中,所有糖果的类型都相同。) 输入规范 输入文件的第一行包含一

一个班级去学校旅行。和往常一样,N个孩子的背包里都塞满了糖果。但很快,争吵就开始了,因为有些孩子比其他孩子吃的糖果多。很快,老师意识到他必须介入:“大家听着!把你们所有的糖果都放在这张桌子上!”

很快,老师的桌子上有一大堆糖果。“现在,我将把糖果分成N个相等的堆,每个人都会得到一个。”老师宣布

“等等,这真的有可能吗?”一些聪明的孩子想知道

问题说明 你会得到每个孩子带来的糖果数量。找出老师是否能将糖果分成N个完全相等的堆。(在本任务中,所有糖果的类型都相同。)

输入规范 输入文件的第一行包含一个整数T,指定测试用例的数量。每个测试用例前面都有一个空行

每个测试用例如下所示:第一行包含N:子项的数量。接下来的N行中的每一行都包含一个孩子带来的糖果数量

输出规格 对于每个测试用例,如果糖果可以平均分配,则输出一行,其中包含一个单词“YES”,否则输出“NO”

例子 输入:

2

5
5
2
7
3
8

6
7
11
2
7
3
4
输出:

YES
NO
问题很简单,但情况是SPOJ法官使用了非常大的输入。我使用了
无符号long-long
作为数据类型,但它显示wc

这是我的密码:

#include<iostream>
using namespace std;
int main()
{
    unsigned long long c=0,n,k,j,testcases,sum=0,i;
    char b[10000][10];
    cin>>testcases;
    while(testcases-->0)
    {
        sum=0;
        cin>>n;
        j=n;
        while(j-->0)
        {
            cin>>k;
            sum+=k;
        }
        if(sum%n==0)
        {
            b[c][0]='Y';b[c][1]='E';b[c][2]='S';b[c][3]='\0';
            c++;
        }
        else
        {
            b[c][0]='N';b[c][1]='O';b[c][2]='\0';
            c++;
        }
    }
    for(i=0;i<c;i++)
        cout<<"\n"<<b[i];
    return 0;
}
#包括
使用名称空间std;
int main()
{
无符号长c=0,n,k,j,测试用例,和=0,i;
字符b[10000][10];
cin>>测试用例;
而(测试用例-->0)
{
总和=0;
cin>>n;
j=n;
而(j-->0)
{
cin>>k;
总和+=k;
}
如果(总和%n==0)
{
b[c][0]='Y';b[c][1]='E';b[c][2]='S';b[c][3]='\0';
C++;
}
其他的
{
b[c][0]='N';b[c][1]='O';b[c][2]='\0';
C++;
}
}

对于(i=0;i如果您的输入大于unsigned long long,那么他们可能希望您实现用于任意精度算术的自定义函数(或者不使用大整数也可以解决此问题)。如果输入适合最大的本机整数类型,但您的算法需要更大的整数,则最有可能是考虑其他算法的时候了。:)

如果您的输入大于无符号long long long,则他们可能希望您为任意精度的算术实现自定义函数(或者不使用大整数就可以解决问题)。如果输入适合最大的本机整数类型,但您的算法需要更大的整数,则很可能是考虑其他算法的时候了。:

这样的一行与您无关吗

b[c][0]='Y';b[c][1]='E';b[c][2]='S';b[c][3]='\0';
写起来不是更简单吗

strcpy(b[c], "YES");

像这样的一句话与你无关吗

b[c][0]='Y';b[c][1]='E';b[c][2]='S';b[c][3]='\0';
写起来不是更简单吗

strcpy(b[c], "YES");

你可以不求所有糖果的和就回答这个问题。只需计算每个孩子堆的余数(小于N)。这样,这个数字就不会变得太大而溢出


因为这是一个竞赛问题,所以我不会写出解决方案,但如果你被卡住了,我可以给你更多的提示。

你可以做这个问题,而不必对所有的糖果求和。只需计算每个孩子堆中的剩余部分(将小于N)。这样,数字就不会变得太大和溢出


因为这是一个竞赛问题,所以我不会写一个解决方案,但是如果你被卡住了,我可以给你更多的提示。

简单。不要把糖果的数量加起来。相反,记下孩子的数量,每个孩子的糖果数量。(
CCK
),以及额外的糖果数量(
CEC
。当你读一行新词时,
CK+=1;CEC+=newCandies;if(CEC>CK)CCK+=(CEC/CK);CEC%=CK;

简单。不要把糖果的数量加起来。相反,要记下孩子的数量,每个孩子的糖果数量(
CCK
),以及额外的糖果数量(
CEC
。当你读新行时,
CK+=1;CEC+=newCandies;if(CEC>CK)CCK+=(CEC/CK);CEC%=CK;

如果你从cin读取,你只能读取适合某种整型变量的值。总和可能会溢出


但是,您不必将数字相加。您可以将余数(除以N)相加,然后查看余数之和是否为N。

如果从cin读取,则只能读取适合某种整型变量的值。总和可能会溢出



但是,您不必将数字相加。您可以将余数相加(从除以N开始)向上,然后看看余数之和是否为N。

你是如何用unsigned long long实现的?文件大小是大的,数据类型是大的?@vaibhav-输入是文件还是cin语句?大的是输入..它们不包括文件..我们必须从用户那里获取输入..那些是幸运的孩子..10^64糖果!您是如何使用unsigned long long实现此功能的?文件大小为大还是数据类型为大?@vaibhav-输入是文件还是cin语句?输入为大。它们不包括文件。我们必须从用户处获取输入。这些都是幸运的孩子…10^64糖果!这样做难道不容易吗直接输出字符串?只有两种选择……编写
会更简单,难道我们不需要不稳定地给出“是”或“否”吗…我们必须为每一个输入保存它,并在最后全部显示..有必要存储我们的答案..@vaibhav:是吗?我想知道。规范没有这样说,这将是非常不正常的。所以我倾向于