CNDYGAME - Editorial

will that make a significant change ?
what is fast IO ?

It will, yes.

ā€œFast IOā€. (Also, please google it)

#include<bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    long long int t;
    const long long mod = 1000000007;
    cin >>t;
    while(t--) {
        long long int n, q, r, sum, turns, extra, ans, oneat;
        oneat = 0;
        sum = 0;
        cin >>n;
        long long int a[n], b[n];
        for (int i=1; i<n; i++) {
        cin >>a[i];
        sum += a[i]-a[i]%2;
        sum = sum%mod;
        b[i] = sum;
        if (a[i]==1)
        oneat = i;
        }
        cin >>a[0];
        sum += a[0] - 1 + a[0]%2;
        sum = sum%mod;
        cin >>q;
        if (oneat == 0) {
            for (int i=0; i<q; i++) {
                ans = 0;
                cin >>r;
                turns = r/n;
                extra = r%n;
                ans = (turns*sum)%mod;
                if (extra-1 > 0)
                ans += b[extra-1];
                if (extra != 0)
                ans += a[extra];
                if (r%n==0 && a[r%n]%2==0)
                ans += 1;
                ans = ans%mod;
                cout <<ans <<endl;
            }
        }
        else if (oneat == 1) {
            for (int i=0; i<q; i++) {
                ans = 0;
                cin >>r;
                turns = r/n;
                extra = r%n;
                if (extra > 1)
                ans += 1;
                ans += turns;
                if (turns==0 && extra==1)
                ans += 1;
                ans = ans%mod;
                cout <<ans <<endl;
            }
        }
        else {
            for (int i=0; i<q; i++) {
                ans = 0;
                cin >>r;
                turns = r/n;
                extra = r%n;
                ans = (sum*turns)%mod;
                if (a[oneat-1]%2 == 0)
                ans -= turns;
                else
                ans += turns;
                if (extra-1 > 0)
                ans += b[extra-1];
                if (extra != 0)
                ans += a[extra];
                if (extra > oneat) {
                    if (a[oneat-1]%2 == 1)
                    ans += 1;
                    else
                    ans -= 1;
                }
                if (r%n==0 && a[r%n]%2==0)
                ans += 1;
                ans = ans%mod;
                cout <<ans <<endl;
            }
        }
    }
    return 0;
}

This should get rid of the TLE.

1 Like

Thanks Let me try, lets see

Thank You Very Much :pray: :pray: :pray:
I was stuck on this question from 6 days !!!
but I am still taking 0.9 seconds ? shouldnā€™t it be 0.3-0.5 sec at most

It depends. You can also use \n in place of endl for printing newline

2 Likes

Yes, use \n instead of endl. endl is slower because it forces a flush, which actually unnecessary.

2 Likes

Yes now it is taking only 0.1 sec Thanks :pray:

Thank You Very Much :pray: :pray: :pray:
Finally its accepted !!!

Nice qsn

Can someone please tell why i am getting WA for subtask 1ā€¦ its giving right answer for every sample testcase mentioned in the editorial above and other combinations which comes into my mind too!

CodeChef: Practical coding for everyone

this code is for 15 points only

the sample test cases donā€™t help much, try all possible combinations, check the video on youtube

its working for the sample testcases mentioned in the editorial above and other combinations which came into my mind too

Let me try, if I get something Iā€™ll post it

Sorry I tried, but couldnā€™t find the problem, Its a hard question

Anyone please help me with this code, I checked my solution with all the cases and it is giving all correct answers as compared to the correct solution. Please tell me that, is the problem occuring due to mod or is due to any other edge test case.
https://www.codechef.com/viewsolution/39667278

As a beginner, this problem taught me to first understand the problem thoroughly and to only dive into coding when Iā€™m absolutely sure of its implementation! A big thanks to the Admin!

Any test-case on which my code goes wrong (only for 15pts). It will be really helpful. Thank you :slightly_smiling_face:
https://www.codechef.com/viewsolution/39674365

You are not missing any test case.
You just need to print the sum as cout<<sum%mod<<endl;
mod=1000000007

Then also first sub-task should pass but it gives WA

it showing correct now

Can anyone help me to find out my mistake .It will be really helpful. Pleaseā€¦
https://www.codechef.com/viewsolution/39679731