Pages

Sunday, July 29, 2012

11850 - Alaska solution

#include <cstring>
#include <cassert>
#include <vector>
#include <list>
#include <queue>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <climits>
#define scan(a) scanf("%d",&a);
#define s2(a,b) scanf("%d %d",&a,&b)
#define PI 2acos(-1.0)
#define s1(a) scanf("%d",&a);
#define INF 2<<15
#define PB(A) push_back(A)
#define clr(a,b) memset(a,b,sizeof(a))

using namespace std;

int main()
{
    int i,j,k;
    int n;
    int dis[1450];
    while(cin>>n && n)
    {
        dis[0]=0;
        for(i=1; i<=n; i++)
        {
            scanf("%d",&dis[i]);
        }

        sort(dis,dis+(n+1));
        dis[n+1]=1422;
        bool c=true;
        for(i=1; i<=n; i++)
        {
            if((dis[i]-dis[i-1])>200)
            {
                c=false;
                break;
            }
        }
        if(dis[n+1]-dis[n]>100)
            c=false;
        if(c)
            printf("POSSIBLE\n");
        else
            printf("IMPOSSIBLE\n");
    }
}

Saturday, July 28, 2012

11475 - Extend to Palindrome solution

#include<iostream>
#include<list>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<set>
#include<utility>
#include<iomanip>
#include<queue>

using namespace std;

#define INF (1<<29)
#define SET(a) memset(a,-1,sizeof(a))
#define ALL(a) a.begin(),a.end()
#define CLR(a) memset(a,0,sizeof(a))
#define FILL(a,v) memset(a,v,sizeof(a))
#define PB push_back
#define FOR(i,n) for(int i = 0;i<n;i++)
#define PI acos(-1.0)
#define EPS 1e-9
#define MP(a,b) make_pair(a,b)
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define READ(f) freopen(f, "r", stdin)
#define WRITE(f) freopen(f, "w", stdout)
#define LL long long
#define MX 1000010
#define MOD 1000000007

char text[MX],pattern[MX];
int failur[MX],length,cnt;

void FailureFunction()
{
    int i=1,j=0;
    failur[0]=0;
    while(i<length)
    {
        if(pattern[i]==pattern[j])
        {
            j++;
            failur[i]=j;
            i++;
        }
        else if(j>0)
            j=failur[j-1];
        else
        {
            failur[i]=0;
            i++;
        }
    }
}

void KMPmatch()
{
    FailureFunction();
    int i=0,j=0;
    while(i<length)
    {
        if(text[i]==pattern[j])
        {
            i++;
            j++;
            //if(j>cnt)           //maximum palindrom
            cnt=j;
        }
        else if(j>0)
            j=failur[j-1];
        else
            i++;

    }
}

int main()
{
    while(cin>>text)
    {
        int i,j;
        CLR(failur);
        length=strlen(text);
        for(i=0,j=length-1; j>=0; i++,j--)  //pattern is the revese string of text
            pattern[i]=text[j];

        cnt=0;
        KMPmatch();

        cout<<text;
        for(i=cnt; i<length; i++)           //extra character needed
            cout<<pattern[i];
        cout<<endl;
    }
    return 0;
}

Monday, July 23, 2012

12468 - Zapping solutions

#include<iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <utility>
#include <set>
#include <math.h>
using namespace std;
int main()
{
    int i,j,k;
    int a,b;
    while(scanf("%d %d",&a,&b)==2)
    {
        if(a<0 && b<0)
            break;
        int temp_a=a;
        int temp_b=b;
        int aa=a;
        int bb=b;
        for(i=1; i<150; i++)
        {
            temp_a++;
            if(temp_a==100)
                temp_a=0;

            if(temp_a==temp_b)
                break;
        }
        for(j=1; j<=150; j++)
        {

            if(a==0)
                a=100;
            a--;
            if(a==b)
                break;
        }
        int res=min(i,j);
        if(aa==bb)
            printf("0\n");
        else
            cout<<res<<endl;
    }
}

12289 - One-Two-Three solution

#include <cstring>
#include <cassert>
#include <vector>
#include <list>
#include <queue>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <climits>
#define scan(a) scanf("%d",&a);
#define s2(a,b) scanf("%d %d",&a,&b)
#define PI 2acos(-1.0)
#define s1(a) scanf("%d",&a);
#define INF 2<<15
#define PB(A) push_back(A)
#define clr(a,b) memset(a,b,sizeof(a))

using namespace std;

int main()
{
    int i,j,k;
    int n,t;
    string str;
    scanf("%d",&t);
    while(t--)
    {
        cin>>str;
        if(str.length()==5)
            printf("3\n");
        else
        {
            int cnt=0;
            if(str[0]=='o') cnt++;
            if(str[1]=='n') cnt++;
            if(str[2]=='e') cnt++;
            if(cnt>=2)
                printf("1\n");
            else
                printf("2\n");
        }
    }
return 0;
}

10948 - The primary problem solutions

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

using namespace std;
int main()
{
    long i,j,k;
    long n=1000010;
    bool prime[n];
    memset(prime,true,sizeof prime);
    for(i=2; i<=sqrt(n); i++)
    {
        if(prime[i]==true)
        {
            for(j=i*i; j<=n; j+=i)
                prime[j]=false;
        }
    }
    long num;
    while(scanf("%d",&num)==1 && num)
    {
        int c=1;
        printf("%ld:\n",num);
        if(prime[num-2])
        {
            c=0;
            printf("2+%ld\n",num-2);
        }
        else
        {

            for(i=3; i<=num/2; i+=2)
            {
                if(prime[i] && prime[num-i])
                {
                    printf("%ld+%ld\n",i,num-i);
                    c=0;
                    break;
                }
            }
        }
        if(c)
            printf("NO WAY!\n");
    }
    return 0;
}

12459 - Bees' ancestors solutions

#include<iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <utility>
#include <set>
#include <math.h>
using namespace std;
int main()
{
    int i,j,k;
    int n;
    long long fib[85];
    fib[0]=1;
    fib[1]=1;
    for(i=2; i<=80; i++)
        fib[i]=fib[i-1]+fib[i-2];
    while(scanf("%d",&n)==1&& n)
    {
        printf("%lld\n",fib[n]);
    }
}