【问题标题】:Different output for same program in ideone and Codeforcesideone 和 Codeforces 中相同程序的不同输出
【发布时间】:2015-04-28 15:25:10
【问题描述】:

对于问题http://codeforces.ru/contest/518/problem/B,我提交了解决方案。 这是解决方案的ideone链接- http://ideone.com/ucGGgA

在 Ideone 中,测试用例 4 的输出与 Codeforces 中的输出不同。

Input - 
zzzzz
ZZZZZ

Output-
in Ideone     - 0 5
In Codeforces - 5 0

编辑 - 这是解决方案 -

//#include<bits/stdc++.h>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <stack>
#include <cmath>
#include <queue>
#include <string>
#include<climits>
#include<set>
#include<list>
#include<sstream>
using namespace std;

#define mod 1000000007
#define tr(c,i) for(auto i=(c).begin(); i != (c).end(); i++)
#define rep(i,n) for(int i=0;i<(n);i++)
#define forup(i,a,b) for(int i=(a);i<=(b);i++)
#define tcsolve() int tcs; cin >> tcs; forup(tc, 1, tcs) solve();
#define mp(a,b) make_pair(a,b)

inline void gi(int &x) {
    register int c = getchar();
    x = 0;
    int neg = 0;

    for (; ((c<48 || c>57) && c != '-'); c = getchar());

    if (c == '-') {
        neg = 1;
        c = getchar();
    }

    for (; c>47 && c<58; c = getchar()) {
        x = (x << 1) + (x << 3) + c - 48;
    }

    if (neg)
        x = -x;
}
inline void print(int a){ char s[20]; int i = 0; do{ s[i++] = a % 10 + '0'; a /= 10; } while (a); i--; while (i >= 0)putchar(s[i--]); putchar('\n'); }

void solve()
{
    string str1, str2, ans;
    int mp[1000];
    rep(i, 100)
    {
        mp[i] = 0;
    }
    cin >> str1 >> str2;
    int yay=0, woops=0;
    rep(i, str2.length())
    {
        mp[str2[i]]++;
    }
    rep(i, str1.length())
    {
        if (mp[str1[i]] > 0)
        {
            yay++;
            mp[str1[i]]--;
        }
        else
        {
            if (str1[i] >= 'a' && str1[i] <= 'z')
            {
                if (mp[str1[i] - 'a' + 'A'] > 0)
                {
                    woops++;
                    mp[str1[i] - 'a' + 'A']--;
                }
            }
            else if (str1[i] >= 'A' && str1[i] <= 'Z')
            {
                if (mp[str1[i] + 'a' - 'A'] > 0)
                {
                    woops++;
                    mp[str1[i] + 'a' - 'A']--;
                }
            }
        }
    }
    cout << yay << " " << woops << "\n";

}

int main()
{
    solve();
}

解决方案的更短(MCVE)版本 -

#include <cstdio>
#include <iostream>
#include <map>
#include <cstdlib>
#include <string>
using namespace std;

void solve()
{
    string str1, str2, ans;
    int mp[1000];
    for (int i = 0; i < 100;i++)
    {
        mp[i] = 0;
    }
    cin >> str1 >> str2;
    int yaya = 0, woops = 0;
    for (int i = 0; i < str2.length();i++)
    {
        mp[str2[i]]++;
    }
    for (int i = 0; i < str1.length(); i++)
    {
        if (mp[str1[i]] > 0)
        {
            yaya++;
            mp[str1[i]]--;
        }
        else
        {
            if (str1[i] >= 'a' && str1[i] <= 'z')
            {
                if (mp[str1[i] - 'a' + 'A'] > 0)
                {
                    woops++;
                    mp[str1[i] - 'a' + 'A']--;
                }
            }
            else if (str1[i] >= 'A' && str1[i] <= 'Z')
            {
                if (mp[str1[i] + 'a' - 'A'] > 0)
                {
                    woops++;
                    mp[str1[i] + 'a' - 'A']--;
                }
            }
        }
    }
    cout << yaya << " " << woops << "\n";

}

int main()
{
    solve();
}

【问题讨论】:

  • 整个问题描述应该在问题中,而不是在链接中
  • 我的问题很简单。为什么当两者都运行默认的 GNU c++ 编译器时,相同的程序有不同的输出。链接中没有任何内容。问题本身就在这里。我已经分享了链接,以便如果有人想查看代码可以看到。
  • @Jitendra Rathor,我们的意思是在这里发布代码。这样就好多了。链接可能会失效。
  • 你能不能把这堵宏混淆代码变成可读的MCVE

标签: c++ dev-c++


【解决方案1】:

在您的第一个循环中,您不会初始化所有值:

int mp[1000];
for (int i = 0; i < 100; i++) // 100 and not 1000
{
    mp[i] = 0;
}

所以以后对mp[i] 的任何访问都具有未定义的值。

你可以直接写int mp[1000] = {};来初始化mp0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2017-03-16
    • 2018-08-09
    • 2022-08-10
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多