C++の挙動について
解決したいこと
AtCoderの以下の問題の答えをC++とPythonで同じように解きました。Pythonでは正解できているのですが、C++では間違っていると表示されます。おそらく言語仕様の問題だと思うのですが、C++に詳しい方、ご教授願います。
D - Logical Expression
ソースコードについては、ANDが出た場合は最新の変数は1固定でひとつ前の答えをコピーし、ORが出た場合は最新の変数が1の時2iを追加し、0の時は同様にひとつ前の答えをコピーしています。
間違っているコード
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
ll N;
int main(){
cin>>N;
vector<ll> A(N+1, 0);
A[0] = 1;
for(ll i=1; i<=N; i++){
string S;
cin>>S;
if(S=="AND"){
A[i] = A[i-1];
}
else {
A[i] = A[i-1] + (1<<i);
}
}
cout<<A[N]<<endl;
}
問題がないコード
N = int(input())
A = [0]*(N+1)
A[0] = 1
for i in range(1, N+1):
S = input()
if(S=="AND"):
A[i]=A[i-1]
else:
A[i] = A[i-1] + (1<<i)
print(A[N])
自分で試したこと
オーバーフロー対策はしてあります。Pythonで解けたので解き方自体は間違ってはいないと思います。
0