前提・実現したいこと
AtCoder問題「C - 数式の書き換え」URL:https://atcoder.jp/contests/abc033/tasks/abc033_c
コードの考え方:数字部分と記号部分に分けて探索する方針になっています。
以下の該当のコードの(*)でstring tと書いた場合、sの文字列の長さ(=n)が一定値を越えると、1つ目のfor文がi<nまで処理されず(nが大きい値の時、最大でもi=47までしか処理が行われず)に、int ans=0;以下の処理が始まります。
char t[100010]にすると、上記のようなことは起こらないのですが。
なぜstringにした場合、上記のようなことが起こるのでしょうか。
また、競技プログラミングに限らず、stringよりもcharを使う方が良いですか?
よろしくお願いします。
該当のソースコード
c++
1#include <bits/stdc++.h> 2 3using namespace std; 4typedef long long ll; 5#define rep(i, j, n) for (int i = j; i < n; i++) 6 7int main() { 8 9 string s;cin>>s; 10 int n=s.size(); 11 int num[100010]; 12 string t;//------------------------------(*) 13 14 for(int i=0;i<n;i++){ 15 if(i%2==0)num[i/2]=s[i]-'0'; 16 else t[i/2]=s[i]; 17 } 18 19 int ans=0; 20 bool zero=false; 21 rep(i,0,(n-1)/2){ 22 if(num[i]==0)zero=true; 23 if(t[i]=='+'){ 24 if(!zero)ans++; 25 else zero=false; 26 } 27 } 28 if(num[(n-1)/2]!=0&&!zero)ans++; 29 30 cout<<ans<<endl; 31 32 return 0; 33} 34
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/16 13:53