以下のリンクの問題を解いていました.
考えとしては,2の因子がすべての要素で合計何個あるかを調べるという考えで以前にC言語を用いてACしているので,同じようにしてC++で書いてみたのですが,こちらではWAとなってしまいました.
5番目のテストケースを調べてコピー&ペーストしたのですが,入力待機画面が続いてしまいました.要素数が10000個なのできちんときれいに張り付けられたのかは確かめにくいのですが,要素数が足りないのかと考え,てきとうに1を入力し続けてみても出力には移行しませんでした.
テストケースの10個などではきちんと動作していました.
なぜこのようなことが起きてしまうのか教えていただきたいです.
以前に自分で書いたコード(AC)
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<math.h> 4#include<string.h> 5long num_two(long a_n){ 6 long count=0; 7 if(a_n%2!=0){ 8 return 0; 9 } 10 while(a_n!=1){ 11 a_n/=2; 12 count++; 13 if(a_n%2!=0){ 14 return count; 15 } 16 } 17 return count; 18} 19int main(void){ 20 int num; 21 long *a_n; 22 long sumcount=0; 23 24 scanf("%d",&num); 25 a_n=(long *)malloc(sizeof(long)*num); 26 int i; 27 for(i=0;i<num;i++){ 28 scanf("%ld",&a_n[i]); 29 sumcount+=num_two(a_n[i]); 30 //printf("%ld:\n",sumcount); 31 } 32 printf("%ld",sumcount); 33 34 free(a_n); 35 return 0; 36} 37
今回書いたコード(WA)
C++
1#include<stdio.h> 2#include<iostream> 3#include<string> 4#include<memory> 5#include<cmath> 6#include<algorithm> 7#include<vector> 8int main(){ 9 int length; 10 std::cin>>length; 11 12 std::vector<long long> vec(length); 13 std::vector<int> judge(length); 14 15 long long count=0; 16 long long sum=0; 17 long long flag=0; 18 19 for(int i=0;i<length;i++) { 20 std::cin>>vec[i]; 21 if(vec[i]%2==0) judge[i]=0; 22 else{ 23 judge[i]=1; 24 flag++; 25 } 26 } 27 28 if(flag==0){ 29 std::cout<<0<<std::endl; 30 return 0; 31 } 32 33 for(int i=0;i<length;i++){ 34 if(judge[i]==0){ 35 count=0; 36 while(vec[i]%2!=1){ 37 vec[i]/=2; 38 count++; 39 } 40 sum+=count; 41 } 42 } 43 long long ans=sum; 44 std::cout<<ans<<std::endl; 45 return 0; 46}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/14 09:26 編集
2020/09/14 09:34
2020/09/14 09:43
2020/09/14 09:45
2020/09/14 09:47 編集
2020/09/14 09:47
2020/09/14 10:14
2020/09/14 10:18
2020/09/14 10:23
2020/09/14 10:25
2020/09/15 07:23
2020/09/15 07:33
2020/09/15 12:48
2020/09/23 07:05