こちらの問題を解いていたのですが、サイト上での実行結果と手元の環境での実行結果が異なり困っています
私のコードは以下の通りです
#include<bits/stdc++.h> using namespace std; int main(){ long n; cin>>n; long numcnt[100001]; long v[n]; for(int i=0;i<n;i++)cin>>v[i]; long tmp=0,res=0; long a[n]; memset(numcnt,0,100001); memset(a,0,n); for(int i=0;i<n;i+=2){ numcnt[v[i]]++; a[i] = v[i]; } for(int i=0;i<n;i+=2){ tmp = max(numcnt[a[i]],tmp); } res += (n/2 - tmp); memset(numcnt,0,100001); memset(a,0,n); tmp=0; for(int i=1;i<n;i+=2){ numcnt[v[i]] ++; a[i] = v[i]; } for(int i=1;i<n;i+=2){ tmp = max(numcnt[a[i]],tmp); } res += (n/2 - tmp); if(res==0&&v[0]==v[1]){ res = n/2; } cout<<res<<endl; }
配列numcntで出現する数字の数を数え、奇数列、偶数列ごとに最頻値を見つけ出し、解を求めています
ここで手元の環境(Eclipseを使っています)では入力を100000にしても想定通り動くのに対し、サイト上では入力を100000にするとエラー、もしくは謎の数字の羅列が返ってきます
tmpの値を求める処理のfor文の条件を(i=0;i<n;i++)という風にするとエラーが起き、上記のようにすると謎の数字の羅列となります
宣言した配列のサイズが問題かと思ったのですが他の人の回答を見る限り、そこが問題ではないようです
実行環境が異なれば挙動が異なるのは当たり前といえば当たり前なのですが、なぜうまく動かないのか分かりません……
どなたか分かる方いらっしゃいましたらご教授お願いします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/30 06:01