2014年5月23日 星期五

[UVA] 562 - Dividing coins

/*20140523 hanting*/
#include <iostream>
#include <cstdlib>
using namespace std;
int store[1000000]={0};
int main()
{
    int N;
    cin>>N;
    while(N--)
    {
        int m;
        cin>>m;
        int a[m];
        int sum=0;
        int board[50001]={1};
        for(int i=0;i<m;i++)
        {
            cin>>a[i];
            sum+=a[i];
        }
        int x=1;
        int mini=sum;
        for(int i=0;i<m;i++)
        {
            int store_size=x;
            for(int j=0;j<store_size;j++)
            {
                int temp=a[i]+store[j];
                if(board[temp]==0)
                {
                    board[temp]=1;
                    store[x]=temp;
                    mini=min(mini,abs(temp-(sum-temp)));
                    x++;
                }
            }
        }
        cout<<mini<<endl;
    }
    return 0;
}

2014年5月22日 星期四

[UVA] 11150 - Cola

/*20140522 hanting*/
#include <iostream>
using namespace std;
int main()
{
    int N;
    while(cin>>N)
    {
        cout<<N+N/2<<endl;
    }
    return 0;
}

2014年5月13日 星期二

[UVA] 10252 - Common Permutation

/*20140513 hanting*/
#include <iostream>
using namespace std;
int main()
{
    string s1,s2;
    while(getline(cin,s1))
    {
        int a[26]={0};
        int b[26]={0};
        for(int i=0;i<s1.size();i++)
        {
            a[(int)s1[i]-97]++;
        }
        getline(cin,s2);
        for(int i=0;i<s2.size();i++)
        {
            b[(int)s2[i]-97]++;
        }
        for(int i=0;i<26;i++)
        {
                for(int j=0;j<a[i] && j<b[i];j++)
                    cout<<(char)(i+97);
        }
        cout<<endl;
    }

    return 0;
}

[UVA] 10050 - Hartals

/*20140513 hanting*/
#include <iostream>
using namespace std;
int main()
{
    int N;
    cin>>N;
    while(N--)
    {
        int D;
        cin>>D;//天數
        bool Days[10000]={0};
        int P;
        cin>>P;//政黨數
        int Party[P];
        for(int i=0;i<P;i++)
        {
            cin>>Party[i];
        }
        for(int i=0;i<P;i++)
        {
            for(int j=Party[i]-1;j<D;j+=Party[i])
            {
                Days[j]=1;
            }
        }
        int count=0;
        for(int i=0;i<D;i++)
        {
            if(i%7!=5 && i%7!=6 &&Days[i]==1)
            {
                count ++ ;
            }
        }
        cout<<count<<endl;
    }
    return 0;
}

2014年5月1日 星期四

[UVA] 12241 - Digits Count

題目連結
/*20140501 hanting*/
#include <iostream>
using namespace std;
void p(int num,int a[])
{
    int ten=1;
    int temp=num;
    while(num)
    {
        for(int i=0;i<num%10;i++)
        {
            a[i]+=ten;
        }
        for(int i=0;i<10;i++)
        {
            a[i]+=ten*(num/10);
        }
        a[0]-=ten;
        a[num%10]+=(temp%ten)+1;
        ten*=10;
        num/=10;
    }
}
int main()
{
    int a,b;
    while(cin>>a>>b && a+b)
    {
        int Num[10]={0};
        p(a-1,Num); /*計算0到a的0~9個有幾個*/
        for(int i=0;i<10;i++) Num[i]*=-1;   /* 所求= 0~b - 0~(a-1) */
        p(b,Num);   /*計算0到b的0~9個有幾個*/
        for(int i=0;i<10;i++)
        {
            cout<<Num[i]<<(i==9 ? '\n': ' ');
        }
    }
    return 0;
}
================================
================================
心血來潮又來寫一次重新推出自己的公式
又一個rank 1 超夢是最強的神奇寶貝
/* 題目: UVa 12241 - Digits Count
 * Language: C++
 * Created on: 2016年8月1日
 *   Author: hanting
 */
#include <iostream>
#include <cstdio>
using namespace std;
void digitCount(int *digit, int n)
{
    int tmp = n;
    int base = 1;
    while(tmp)
    {
        if(n >= base)
            digit[0] -= base;
        digit[tmp%10] += n%base + 1;
        int t = tmp%10;
        for(int i = 0; i < t; i++)
            digit[i] += base;
        tmp /= 10;
        for(int i = 0; i < 10; i++)
        {
            digit[i] += tmp*base;
        }
        base *= 10;
    }
}
int main()
{
    int a, b;
    while(scanf("%d%d", &a, &b) == 2 and a+b)
    {
        int digit[10] = {0};
        int digit2[10] = {0};
        digitCount(digit, a-1);
        digitCount(digit2, b);
        for(int i = 0; i < 9; i++)
        {
            //cout << digit[i] << " ";
            printf("%d ", digit2[i]-digit[i]);
        }
        //cout << digit[9] << endl;
        printf("%d\n", digit2[9]-digit[9]);
    }
    return 0;
}