TOTSCR - Editorial

I made the required changes. Please help me sort out why am I getting wrong answer. The problem was very simple and I used the same logic which was given at the start of the post.

#include<string>

using namespace std;

int main() {
	// your code goes here
	int T;
	cin>>T;
	while(T--){
	    int n,k;
	    cin>>n>>k;
	    int A[k];
	    string S[n];
	    for(int i = 0; i< k; i++){
	        cin>>A[i];
	    }
	    for(int i = 0; i<n;i++ ){
	    	cin>>S[i];
	    }
	    for(int i = 0; i < n; i++){
	        int sum = 0;
	        for(int j =0;j<k;j++){
	            if(S[i][j] == '1'){
	                sum += A[j];
	            }
	        }
	        cout<<sum<<endl;
	    }
	}
	return 0;
}
1 Like

I think it should be long long , as I made the same error & after changing it got accepted

1 Like

Yeah, as said by @mittal_sagar , the answer would not fit in an Integer. You should use bigger one, say long or long long. I guess there are no other mistakes.

thank you!

got it thank you!!

thanks bro it worked.
but i have a doubt, In c++ long int and int both are 4 bytes so why int is not working?

I used long long, long long int, and even int. But none of them worked. Gave me WA.
Can anyone tell me what’s wrong with my code?

My code:

 #include <iostream>
using namespace std;

 int main()
{

    long long t;

    long long n, k;

    cin >> t;

    long long scr = 0;
    while (t--)
    {
        cin >> n >> k;

        long long a[k];

        for (size_t i = 0; i < k; i++)
        {
            cin >> a[i];
        }

        string s;

        for (size_t i = 0; i < n; i++)
        {
            scr = 0;
            cin >> s;

            for (size_t j = 0; j < 2; j++)
            {

                if (s[j] - '0' == 1)
                {
                    scr += a[j];
                }

                else if (s[j] - '0' == 0)
                    scr += 0;
            }
            cout << scr << endl;
        }
    }
}

my code passed the given sample test case but is showing the wrong answer on submission. can ayone help me?

:::::::::::code::::::::::::

#include
#include<bits/stdc++.h>

using namespace std;

int score(string str,int arr[],int k)
{
int sum=0;
for(int i=0;i<str.length();i++)
{
if(str[i]==‘0’)sum=sum+0;
else if(str[i]==‘1’)
{
sum=sum+arr[i];
}
}
return sum;
}

int main()
{
int t;
cin >> t;

while (t>0)
{
	int n,k;
    cin >> n>>k;
    int a[k];

    for(int i = 0; i < k; ++i)
    {
        cin >> a[i];
    }

    string s[n];
    for(int i = 0; i < n; ++i)
    {
        cin >> s[i];
    }

    for(int i=0;i<n;i++)
        cout << score(s[i],a,k) << endl;
    t--;
}

return 0;

}

Hey my code is giving tle error can anybody plss help how can i optimize it ??
code is here - CodeChef: Practical coding for everyone

Your code will work for test cases
As test cases had situation of 2 questions
What if there are 3 questions and array had 3 elements
I guess your code wont work in that case
I suggest read the problem again

I tried with case like there are 3 questions and 2 people solving it in that case it also worked

Hey ,Thanks for replying
I used total as long long instead of int and it got submitted.

Why j<2?
Shouldn’t it be j<k?

Use long long dude.

can anyone tell me how to solve this without if and ternary operator

Simple. See the following snippet.

char s[20000];
scanf("%s",s);
long long int score = 0;
for(int i=0;i<k;i++)
    score += a[i] * (s[i] - '0');
printf("%lld\n", score);

Run this under a loop of N

1 Like

The constraints of N and K were not mentioned separately. What if K = 1000000 and N = 1. It would still satisfy N * K <= 1000000. But most of the solutions would fail if this input is given.
Edit: I meant, if the size of array is statically declared.

import java.util.;
import java.lang.
;
import java.io.*;

class Codechef
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while(T–>0){
int N = sc.nextInt();
int K = sc.nextInt();
long arr[] = new long[K];
for (int i=0; i<K; i++){
arr[i] = sc.nextLong();
}
String []s = new String[N];
for (int i=0; i<N; i++) {
s[i] = sc.next();
}
for (int i=0; i<N; i++){
long out=0;
for (int j=0; j<K; j++) {
if(s[i].charAt(j) == ‘1’){
out += arr[j];
}
}
System.out.println(out);
}
}
}
}

Can anyone tell me why its giving me TLE error

int is usually 4 bytes, long int has 4 bytes minimum, but nowadays it is usually 8 bytes.

#include<stdio.h>
#include<stdlib.h>
int main(){
int N, K, T;
long long int score;

scanf("%d", &T);

for(int i=0; i<T; i++){
    scanf("%d %d", &N, &K);

    long long int A[K];
    char S[N][K];

    for(int j=0; j<K; j++){
        scanf("%lld", &A[j]);
    }
    for(int j=0; j<N; j++){
        scanf("%s", S[j]);
    }
    for(int j=0; j<N; j++){
        score = 0;
        for(int l=0; l<K; l++){
            if(S[j][l] == '1'){
                score += A[l];
            }
        }
        printf("%lld\n", score);
    }
}
return 0;

}

my program is working fine for provided test case but when I’m submitting, It is saying wrong output…?
why is this happening…?