CHFAR - EDITORIAL

PROBLEM LINK:

Practice
Contest

Setter: Misha Chorniy
Tester: Hasan Jaddouh
Editorialist: Taranpreet Singh

DIFFICULTY:

Simple

PREREQUISITES:

Basic Math.

PROBLEM:

Given a sequence A of length N, by changing at most K elements, can we make A_1^2+A_2^2+A_3^2 \dots A_N^2 \leq A_1+A_2+A_3 \dots A_N?

SUPER QUICK EXPLANATION

  • Count number of A[i] > 1, say C. If C \leq K, we can achieve inequality, otherwise no.

EXPLANATION

First of all, It can be seen that for every integer X, X \leq X^2. So, we can prove that we can never achieve A_1^2+A_2^2+A_3^2 \dots A_N^2 < A_1+A_2+A_3 \dots A_N.

Only option is, to achieve A_1^2+A_2^2+A_3^2 \dots A_N^2 == A_1+A_2+A_3 \dots A_N.

Now, Let’s find all integers, for which X^2 == X. We can find, that This holds for only X = 0 and X = 1. But we can assign only positive values to elements. Hence, to achieve this inequality, we need all elements to be 1.

Hence, just count the number of elements greater than 1 and if this count is \leq K, we can achieve this inequality, otherwise, we cannot achieve.

Challenge

Find any real value for which X^2 < X. Enjoy solving. :stuck_out_tongue:

Time Complexity

Time complexity is O(N) per test case.

AUTHOR’S AND TESTER’S SOLUTIONS:

Setter’s solution
Tester’s solution
Editorialist’s solution

Feel free to Share your approach, If it differs. Suggestions are always welcomed. :slight_smile:

Challenge: All values lying in the interval (0, 1).

1 Like

Perfect :slight_smile:

Find real values for which X^3 < X. Enjoy :stuck_out_tongue:

All values lying in (0, 1) or (- \infty, -1).

1 Like

Seems like I’m running out of math challenges. :stuck_out_tongue:

Hehe…

(Added dots to make 10 characters needed for making a comment)

any real number lying between 0 and 1

1 Like

The Time Complexity is going to O(n)

According to the solution you are providing -

For all integers we have to check -
      ( x != 1 )

which will take O(n) time !
(if we check in linear fashion)
4 Likes

Thanks for catching. I missed it up. Corrected now :slight_smile:

Minimum value for k is 1 ,1 \leq K \leq N \leq 10^4

So if initially suppose all numbers are one,for eg. n=3 k=2 A=\{1,1,1\}
Now because minimum value of k is 1 not zero so in all cases we have to consider value of k=1

But non 1 number count is zero as all three numbers are 1 from example above.
so according to your solution result should be YES.

But as we have to consider at least k=1
So your solution fails as changing any of the three 1’s to other value will not yield the desired result.

Please reply if i am wrong.

the code i’m using is this :
and i’m getting segmentation fault on submission but not while compiling .
#include
using namespace std;

int main() {
// your code goes here
int t;
int a[100];
cin>>t;
while(t–){
int n,k,count=0,i;
cin>>n>>k;

    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    
    for(i=0;i<n;i++)
    {
        if(a[i]>1)
        count++;
    }
    if(k>count)
    {
        cout<<"YES"<<endl;
    }
    else{
        cout<<"NO"<<endl;
    }
}
return 0;

}

//