What’s wrong with my code?
https://www.codechef.com/viewsolution/26129221
can someone pls let me know what mistake i am doing
1.taking input in string
2.declared long long for product
still WA
It has to be nc1 + nc2 where n = no of zeros in string, in more detail, right?
Why this gets a WA even though I took care of overflow?
#include
#include
using namespace std;
int main(){
int T;
cin>>T;
for(int t=1;t<=T;t++){
int N;
cin>>N;
char str[1];
long long int ones=0,substrings=0;
for(int i=0;i<N;i++){
cin>>str[0];
if(strcmp(str,"1")==1){
ones++;
}
}
if(ones==1){
substrings = 1;
}
else{
substrings = ones*(ones-1);
substrings = substrings/2;
substrings = substrings + ones;
}
cout<<substrings<<endl;
}
}
Please provide explanation on how you came up with this formula.
Please either format your code or link to your submission - the forum software has mangled it and it won’t compile!
#include <bits/stdc++.h>
#include
#include
using namespace std;
int main()
{
int t,i,c=0,j=0,n;
string s1,s2;
cin>>t;
while(t–){
cin>>n;
for(i=0;i<n;i++){
cin>>s1[i];
}
for(i=0;i<n;i++){
if(s1[i]==‘1’){
j=i;
while(j<n){
if(s1[j]==‘1’)
{c++; }
j++;
}
}
}
cout<<c<<"\n";
c=0;
}
}
Pls help.Why I am getting runtime ?
Please either format your code or link to your submission - the forum software has mangled it and it won’t compile!
Edit:
It’s because you’re trying to place chars at the i
th index of s1
for i
= 0 … n
:
for(i=0;i<n;i++){
cin>>s1[i];
}
when s1
is empty.
because of this
#include <bits/stdc++.h>
#include <string>
using namespace std;
int main()
{
long int t,i,j=0,n;
long long int c=0;
string s1;
cin>>t;
while(t--){
cin>>n;
for(i=0;i<n;i++){
cin>>s1[i];
}
for(i=0;i<n;i++){
if(s1[i]=='1'){
j=i;
while(j<n){
if(s1[j]=='1')
{
c++;
}
j++;
}
}
}
cout<<c<<"\n";
c=0;
}
}
It is running but on submission it is giving runtime error.
Pls explain.I’m not able to understand
Try reading this:
how can “long int count” instead of “int count” make wrong answer right?my submission bcame successful when i used long int count.
https://www.codechef.com/viewsolution/29154571
Where is my code is wrong i donot understand.Please Explain.
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin>>t;
while(t–){
int n;
cin>>n;
string str;
cin>>str;
int count=0;
for(int i=0;i<n;i++){
if(str[i]==‘1’){
count++;
}
}
int ans=0;
if(count==1){
ans=count;
}else if(count==2){
ans=3;
}else{
ans=(count+1)*(count);
ans=ans/2;
}
// cout<<count<<endl;
cout<<ans<<endl;
}
return 0;
}
The constraint for n is 1<=n<=10^5 but we had to take long long for storing the count value of 1’s
but count value of 1’s must be less than or equal to 10^5.
Can someone explain me why???
You don’t have to, but it makes it easier to avoid overflow when computing (num1s * (num1s - 1))/2
. You could also do e.g.:
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
for (int t = 0; t < T; t++)
{
int n;
cin >> n;
string binaryString;
cin >> binaryString;
int num1s = 0;
for (const auto bit : binaryString)
{
if (bit == '1')
num1s++;
}
cout << (static_cast<long long int>(num1s) * (num1s - 1)) / 2 << endl;
}
}
Quite often Competitive Programmers will use long long int
or an equivalent instead of int
for all variables as it can be less error-prone.
Take c as long long int.
Count of 1 can be as high as 10^5 , and when you multiply it n*(n+1), its goes out of range , thus we need to take long long int for n.
Can some check what is the error in my code, i used something like two pointer to count starting 1 and added all the ending 1’s after that pointer
https://www.codechef.com/viewsolution/38096948