谷歌代码堵塞2017年亚太区国家领导人

时间:2016-07-10 10:27:11

标签: c++

关于StackOverFlow的第一个问题。
这是一个问题:https://code.google.com/codejam/contest/11274486/dashboard#s=p0

我完成了我的c ++代码并且它正常工作,正确输出文件(我认为)。但Dashboard系统响应不正确。我不知道为什么会这样 我希望有人可以弄清楚我的算法有什么问题,或者如果你解决了它就分享你的代码。谢谢!
抱歉我的英语不好 这是我的代码与Xcode 7.3.1:

// already solved the problem and removed my bad code :P

感谢Hagen von Eitzen,
这是正确的版本:

#include <iostream>
using namespace std;

int letternum(string name)
{
    int i,num = 0;
    int count[26];
    for (i=0; i<26; i++)
        count[i] = 0;
    for (i=0; i<name.length(); i++)
    {
        if (name[i] != ' ')
            count[name[i]-'A'] = 1;
    }
    for (i=0; i<26; i++)
    {
        num += count[i];
    }
    return num;
}

int main()
{
    int T,N,t,n;
    int longlen,namelen;
    char tempchar[21];
    string longest;
    string name;

    FILE *fin  = fopen("A-large-practice.in", "r");
    FILE *fout = fopen("A-large-practice.out", "w");

    fscanf(fin, "%d", &T);

    for (t=0; t<T; t++)
    {
        memset(tempchar, '\0', 21);
        longest = "";
        name = "";
        fscanf(fin, "%d\n", &N);
        fscanf(fin, "%[^\n]%*c", tempchar);
        longest = tempchar;
        longlen = letternum(longest);

        for (n=1; n<N; n++)
        {
            memset(tempchar, '\0', 21);
            name = "";
            fscanf(fin, "%[^\n]%*c", tempchar);
            name = tempchar;
            namelen = letternum(name);
            if (longlen == namelen )
            {
                if (longest > name)
                {
                    longest = name;
                    longlen = letternum(longest);
                }
            }
            if ( longlen < namelen )
            {
                longest = name;
                longlen = letternum(longest);
            }
        }
        fprintf(fout, "Case #%d: %s\n", t+1, longest.c_str());
    }
}

2 个答案:

答案 0 :(得分:0)

名称最多可包含20个字符。您还需要为终止NUL字符保留空间。否则,如果输入确实是20个字符长,那么您的代码可能会崩溃

letternum:效果(此处几乎不相关):您总是会计入最大长度20,这可能会不必要地长;另外,你很幸运,你没有忘记将整个阵列归零。 如果在第一个循环中将++替换为=1,则只需要在第二个循环中求和。

另外,为什么不使用stringstrcmp等标准?

答案 1 :(得分:0)

这适用于小型和大型数据集。

def word(a):
''' this will find the total number of unique character in the name'''     
x=a.split()          
x="".join(x)
x=list(x)
x=set(x)
x=list(x)
return len(x)

with open('A-large-practice.in','r') as f:
  content = f.read().splitlines()
fo=open('large_output.txt','r+')
i=1
p=0
while i<len(content):
x=int(content[i])
y=[]
name=[]
for j in range(1,x+1):
    name.append(content[i+j])
    y.append(word(content[i+j]))
z=[name[i] for i in range(len(y)) if y[i]==max(y)]
z.sort()
z=z[0]
p=p+1
fo.write('case #{}: {} \n'.format(p,z))
i=i+x+1
fo.close()