CF: 158B (Taxi)


Problem link: http://codeforces.com/problemset/problem/158/B

Solution


// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int main ()
{
    int n;

    scanf ("%d", &n);

    int freq [4];
    
    memset(freq, 0, sizeof freq);

    int input;

    for ( int i = 0; i < n; i++ ) {
        scanf ("%d", &input);

        freq [input - 1]++;
    }

    int cnt = freq [3];

    cnt += freq [2];

    freq [0] -= freq [2];

    cnt += (freq [1] / 2);

    freq [1] -= (freq [1] / 2 * 2);

    if (freq [1]) {
        cnt++;
        freq [0] -= 2;
    }

    if (freq [0] > 0) {
        cnt += (freq [0] / 4);
        freq [0] -= (freq [0] / 4 * 4);

        if (freq [0] > 0) cnt++;
    }

    printf ("%d\n", cnt);

    return 0;
}

// @END_OF_SOURCE_CODE

CF: 118A (String Task)


Problem link: http://codeforces.com/contest/118/problem/A

Solution 1


// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <string>
#include <cctype>

using namespace std;

bool isVowel(char c)
{
    return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y');
}

int main ()
{
    string input;

    cin >> input;

    for ( int i = 0; i < input.size(); i++ ) {
        input [i] = tolower(input [i]);
    }

    for ( int i = 0; i < input.size(); i++ ) {
        if (!isVowel(input [i])) {
            printf (".%c", input [i]);
        }
    }

    printf ("\n");

    return 0;
}


// @END_OF_SOURCE_CODE

Solution 2


// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <string>
#include <cctype>

using namespace std;

bool isVowel(char c)
{
    return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y');
}

int main ()
{
    string input;

    cin >> input;

    for ( int i = 0; i < input.size(); i++ ) {
        if (!isVowel(input [i])) {
            printf (".%c", tolower(input [i]));
        }
    }

    printf ("\n");

    return 0;
}


// @END_OF_SOURCE_CODE

CF: 158A (Next Round)


Problem link: http://codeforces.com/problemset/problem/158/A

ব্যাপারটা অনেকটা এরকম যে, n-সংখ্যক প্রতিযোগী আছে, এবং তাদের পয়েন্ট দেয়া আছে। আমরা এদের মধ্য থেকে k-জন প্রতিযোগী নির্বাচিত করতে চাই। প্রতিযোগীদের পয়েন্টগুলো সর্ট করেই দেয়া থাকবে। অর্থাৎ, যে সবচেয়ে বেশি পয়েন্ট পেয়েছে তার পয়েন্ট সবার আগে থাকবে। যেমন প্রথম ইনপুট স্যাম্পল দেখি।

8 5
10 9 8 7 7 7 5 5

অর্থাৎ, ৮ জনের মধ্যে প্রথম ৫ জনকে নিতে চাই। এখন কথা হল, পঞ্চম প্রতিযোগী পেয়েছে ৭ পয়েন্ট এবং আমরা তাকে নিব। তবে, ষষ্ঠ প্রতিযোগীও পেয়েছে ৭ পয়েন্ট, তাকে কিভাবে বাদ দেই? (তার তো মন খারাপ হয়ে যাবে :-(, তাই না? সুতরাং তাকেও নিতে হবে)। তাহলে আমাদের উত্তর হবে, ৬ জনকে নিতে হবে।

আরও একটা উদাহরণ

8 5
100 90 88 85 80 80 80 80

Answer:
8

আরও একটা উদাহরণ

8 5
100 90 88 0 0 0 0 0

Answer:
3

আমরা ৫ জনকে নিতে চেয়েছিলাম বটে। তবে ০ (শুন্য) পেলে তো আর নেয়া যায় না! তাই আমরা ৩ জনকে নিতে পারব।

(প্রবলেমে বলা আছে, পজিটিভ নাম্বার পেতে হবে, অর্থাৎ >= ১, মনে রাখতে হবে, ০ (শুন্য) পজিটিভ নাম্বার না)

Solution 1


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>

using namespace std;

int main(int argc, const char * argv[])
{
    int n, k;

    scanf ("%d %d", &n, &k);

    int solved [50 + 10];

    for ( int i = 0; i < n; i++ ) {
        scanf ("%d", &solved [i]);
    }

    // margin is our last limit. 
    // We can not accept contestant's point below this limit.  
    int margin = solved [k - 1];

    int cnt = 0;

    for ( int i = 0; i < n; i++ ) {
        
        // contestant's point must be greater than or equals to margin 
        // and contestant's point must be a positive number  
        if ( solved [i] >= margin && solved [i] ) cnt++;
    }

    printf ("%d\n", cnt);

    return 0;
}

// @END_OF_SOURCE_CODE

CF: 4A (Watermelon)


Problem link: http://codeforces.com/problemset/problem/4/A

Solution 1


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>

using namespace std;

int main ()
{
    int n;

    scanf ("%d", &n);

    // if n is odd, ans is NO. Odd numbers can not be expressed as a sum of
    // two even numbers 
    if (n % 2 != 0) printf ("NO\n");
    
    // if n is even, but less than or equals to 2, ans is NO. 
    // possible values of n: 0 and 2 
    // NB: Both part should be even and POSITIVE (positive > 0)
    if (n <= 2) printf ("NO\n");
        
    else printf ("YES\n");

    return 0;
}

// @END_OF_SOURCE_CODE

Solution 2


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>

using namespace std;

int main ()
{
    int n;

    scanf ("%d", &n);

    char yes [] = "YES\n";
    char no [] = "NO\n";

    if (n % 2 != 0) printf ("%s", no);
    if (n <= 2) printf ("%s", no);
    else printf ("%s", yes);

    return 0;
}

// @END_OF_SOURCE_CODE

Solution 3


// @BEGIN_OF_SOURCE_CODE
 
#include <cstdio>
 
using namespace std;
 
int main ()
{
    int n;
 
    scanf ("%d", &n);
 
    int remain = n - 2;
 
    if (remain >= 2 && remain % 2 == 0 ) printf ("YES\n");
    else printf ("NO\n");
 
    return 0;
}
 
// @END_OF_SOURCE_CODE

Solution 4


// @BEGIN_OF_SOURCE_CODE
 
#include <cstdio>
 
using namespace std;
 
int main ()
{
    int n;
 
    scanf ("%d", &n);
 
    printf ("%s\n", n >= 4 && n % 2 == 0 ? "YES" : "NO");
 
    return 0;
}
 
// @END_OF_SOURCE_CODE

CF: 1A (Theatre Square)


Problem link: http://codeforces.com/problemset/problem/1/A

Solution 1


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>
#include <iostream>

using namespace std;

int main ()
{
    int n;
    int m;
    int a;

    scanf ("%d %d %d", &n, &m, &a);

    long long flagsByRow;
    
    if (n % a == 0) {
        flagsByRow = n / a;
        
    } else {
        flagsByRow = n / a;
        flagsByRow++;

    }

    long long flagsByColumn;
    
    if (m % a == 0) {
        flagsByColumn = m / a;
        
    } else {
        flagsByColumn = m / a;
        flagsByColumn++;

    }

    cout << flagsByRow * flagsByColumn << endl;

    return 0;
}

// @END_OF_SOURCE_CODE

Solution 2


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>
#include <iostream>

using namespace std;

int main ()
{
    int n;
    int m;
    int a;

    scanf ("%d %d %d", &n, &m, &a);

    long long flagsByRow = n / a;

    if (n % a) flagsByRow++;

    long long flagsByColumn = m / a;

    if (m % a) flagsByColumn++;

    cout << flagsByRow * flagsByColumn << endl;

    return 0;
}

// @END_OF_SOURCE_CODE

Solution 3


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>
#include <cmath>

using namespace std;

int main ()
{
    int n;
    int m;
    int a;

    scanf ("%d %d %d", &n, &m, &a);

    printf ("%0.lf\n", ceil(n / (double) a) * ceil (m / (double) a));

    return 0;
}

// @END_OF_SOURCE_CODE

Solution 4


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>
#include <iostream>

using namespace std;

int main ()
{
    long long n;
    long long m;
    long long a;

    cin >> n >> m >> a;
    
    cout << ((n + a - 1) / a) * ((m + a - 1) / a) << endl; 

    return 0;
}

// @END_OF_SOURCE_CODE

Solution 5 (Author: Shishir)


// @Author: Shishir

#include<stdio.h>
#include<math.h>
long long int row,column,capture_size;
void total_stone()
{
    long long int c=0;
    long long int remaining_column=column;
    if(capture_size==1)printf("%lld\n",row*column);
    else
    {
        while(remaining_column>0)
        {
            c++;
            remaining_column-=capture_size;
        }

        printf("%lld\n",((long long int)(ceil)((double)row/capture_size))*c);
    }
}
int main()
{
    while(scanf("%lld %lld %lld",&row,&column,&capture_size)!=EOF)
    {
        total_stone();
    }
    return 0;
}