Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我要无语了,多少组测试数据都发现不了错误,大牛们帮帮忙

Posted by cuero at 2009-02-13 22:34:00 on Problem 1019
#include <iostream>
using namespace std;

long long a[40000];

void solve(int t, int j)
{
    int tem = t-a[j], tempo;
    if (tem < 10)
    {
        printf("%d\n",tem);
        return;
    }
    else if (tem >= 10 && tem < 190)
    {
        tempo = tem-9;
        tempo = (tempo+1)/2+9;
        if (tem%2)
        {
            printf("%d\n",tempo%10);
            return;
        }
        else
        {
            printf("%d\n",tempo/10);
            return;
        }
    }
    else if (tem >= 190 && tem < 2890)
    {
        tempo = tem-189;
        tempo = (tempo+2)/3+99;
        switch(tem%3)
        {
            case 0:
                printf("%d\n",tempo%10);
                return;
            case 1:
                printf("%d\n",tempo/100);
                return;
            case 2:
                printf("%d\n",tempo/10%10);
                return;
            default: return;
        }
    }
    else if (tem >= 2890 && tem < 38890)
    {
        tempo = tem-2889;
        tempo = (tempo+3)/4+999;
        switch(tem%4)
        {
            case 2:
                printf("%d\n",tempo/1000);
                return;
            case 3:
                printf("%d\n",tempo/100%10);
                return;
            case 0:
                printf("%d\n",tempo/10%10);
                return;
            case 1:
                printf("%d\n",tempo%10);
                return;
            default: return;
        }
    }
    else
    {
        tempo = tem - 38889;
        tempo = (tempo+4)/5 + 9999;
        switch(tem%5)
        {
            case 0:
                printf("%d\n",tempo/10000);
                return;
            case 1:
                printf("%d\n",tempo/1000%10);
                return;
            case 2:
                printf("%d\n",tempo/100%10);
                return;
            case 3:
                printf("%d\n",tempo/10%10);
                return;
            case 4:
                printf("%d\n",tempo%10);
                return;
        }
    }
}
int main()
{
    int N, t;
    unsigned int i, j;
    scanf("%d",&N);
    a[0] = 0;
    for (i = 1; i < 10; i++)
    {
        a[i] = a[i-1]+i;
    }
    for (i = 10; i < 100; i++)
    {
        a[i] = a[i-1]+2*i-9;
    }
    for (i = 100; i < 1000; i++)
    {
        a[i] = a[i-1]+3*(i-99)+189;
    }
    for (i = 1000; i < 10000; i++)
    {
        a[i] = a[i-1]+4*(i-999)+2889;
    }
    for (i = 10000; a[i-1] <= 2147483647; i++)
    {
        a[i] = a[i-1]+4*(i-9999)+38889;
    }
    for (int i = 0; i < N; i++)
    {
        scanf("%d",&t);
        if (t < 230348388)
        {
            for (j = 0;; j++)
            {
                if (t>a[j] && t <= a[j+1])
                {
                    solve(t, j);
                    break;
                }
            }
        }
        else if (t>=230348388 && t < 944193388)
        {
            for (j = 10999;; j++)
            {
                if (t>a[j] && t <= a[j+1])
                {
                    solve(t, j);
                    break;
                }
            }
        }
        else if (t >= 944193388)
        {
            for (j = 21999;; j++)
            {
                if (t>a[j] && t <= a[j+1])
                {
                    solve(t, j);
                    break;
                }
            }
        }
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator