xdoj ranting记

来源:互联网 发布:python 2.7 idle 编辑:程序博客网 时间:2024/05/21 14:42

莫名想刷一波xdoj的排名,很玄学


1053: 正数负数

思路:先来一道纯水题,判断正负

#include <iostream>#include <cstdio>using namespace std;int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n>0)            printf("yes\n");        else if(n<0)            printf("no\n");        else            printf("light\n");    }    return 0;}


1003: 亮亮做加法 (a.k.a another A+B Problem)

思路:按位模拟一下进制加法计算进位过程,虽然提示用java,但我还是用c++跑完了

#include <iostream>#include <cstdio>#include <cstring>using namespace std;char x[100],y[100];int sum[100];int c2i(char a){    if(a>='0'&&a<='9')        return (int)(a-'0');    else if(a>='A'&&a<='F')        return (int)(10+a-'A');    else        return -1;}char i2c(int a){    if(a>=0&&a<=9)        return (char)('0'+a);    else if(a>=10&&a<=15)        return (char)('A'+a-10);    else        return 'N';}int main(){    int b,xlen,ylen;    while(scanf("%d%s%s",&b,x,y)!=EOF)    {        bool jw=false;        memset(sum,0,100*sizeof(int));        xlen=strlen(x);        ylen=strlen(y);        int t=0;        for(int i=xlen-1,j=ylen-1;i>=0||j>=0||jw;i--,j--)        {            if(i<0)            {                i=0;                x[i]='0';            }            if(j<0)            {                j=0;                y[j]='0';            }            int temp;            temp=c2i(x[i])+c2i(y[j])+sum[t];       //     cout<<temp<<endl;            if(temp>=b)            {                sum[t]=temp%b;      //          cout<<sum[t]<<endl;                t++;                sum[t]+=temp/b;                jw=true;            }            else            {                sum[t]=temp;     //           cout<<sum[t]<<endl;                t++;                jw=false;            }        }        for(int i=t-1;i>=0;i--)        {            char temp;            temp=i2c(sum[i]);            printf("%c",temp);        }        printf("\n");    }    return 0;}

1008: Josephus环

思路:这是个很经典的问题了,由于数据范围很友好,直接模拟一遍就好了

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;bool a[1010];int main(){    int n,k;    scanf("%d%d",&n,&k);    int leftcount=n;    int index=0;    int countnum=0;    memset(a,true,n*sizeof(bool));    while(leftcount>1)    {        if(a[index])        {            countnum++;            if(countnum==k)            {                countnum=0;                a[index]=false;                printf("%d ",index+1);                leftcount--;            }        }        index++;        if(index==n)            index=0;    }    for(int i=0;i<n;i++)    {        if(a[i])            printf("%d\n",i+1);    }    return 0;}

1041: Franky的游戏O

思路:这又是一道超级水题,主要就是读懂题意,转换一下,就成了奇偶判断的题了

#include <iostream>#include <cstdio>using namespace std;int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n,m;        scanf("%d%d",&n,&m);        if(n%2==0&&m%2==0)            printf("%d\n",2);        else            printf("%d\n",1);    }    return 0;}


1054: 攻击BOSS

思路:又是一道模拟题,直接逐位判断就好了

#include <iostream>#include <cstdio>using namespace std;int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        int sum=0;        while(n>0)        {            int m=n%10;            n=n/10;            if(m==8)                sum+=2;            else if(m==6||m==9||m==0)                sum++;        }        printf("%d\n",sum);    }    return 0;}

1055: 如此遍历

思路:蛇形dfs搜索,注意一下边界转换条件

#include <iostream>#include <cstdio>using namespace std;const int maxn = 60;int a[maxn][maxn];int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF)    {        int i,j;        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                scanf("%d",&a[i][j]);            }        }        i=0;        j=0;        bool up = false;        bool unchange = true;        if(n==1)        {            for(int k=0;k<m-1;k++)            {                printf("%d ",a[n-1][k]);            }            printf("%d\n",a[n-1][m-1]);        }        else if(m==1)        {            for(int k=0;k<n-1;k++)            {                printf("%d ",a[k][m-1]);            }            printf("%d\n",a[n-1][m-1]);        }        else        {            while(i<n-1||j<m-1)            {                printf("%d ",a[i][j]/*,i,j*/);                if(i==n-1&&unchange)                {                    if(up)                        up = false;                    else                        up = true;                    j++;                    unchange = false;              //      cout << "1" << " ";                }                else if(j==0&&unchange)                {                    if(up)                        up = false;                    else                        up = true;                    i++;                 //   cout << "2" << " ";                    unchange = false;                }                else if(j==m-1&&unchange)                {                    if(up)                        up = false;                    else                        up = true;                    i++;                    unchange = false;                //    cout << "2" << " ";                }                else if(i==0&&unchange)                {                    if(up)                        up = false;                    else                        up = true;                    j++;                    unchange = false;                 //   cout << "1" << " ";                }                else if(up)                {                    i--;                    j++;                    unchange = true;                 //   cout << "3" << " ";                }                else                {                    i++;                    j--;                    unchange = true;                 //   cout << "4" << " ";                }            }            printf("%d\n",a[n-1][m-1]);        }    }    return 0;}

1056: 寻找BOSS

思路:这就是个简单dp了,按位置dp所有可能情况就好了

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <map>#include <cmath>#include <string>#include <queue>#include <stack>using namespace std;const int maxn = 1e3+10;const int mode = 1e4+7;int dp[maxn][maxn];int main(){    int n;    memset(dp,0,sizeof(dp));    for(int i=0;i<=1000;i++)    {        dp[i][0] = 1;    }    for(int i=1;i<=1000;i++)    {        for(int j=i;j<=1000;j++)        {            dp[j][i] = (dp[j-1][i] + dp[j][i-1]) % mode;        }    }    while(scanf("%d",&n)!=EOF)    {        printf("%d\n",dp[n][n]);    }    return 0;}

1001: 又是苹果

思路:vector嵌vector存图,坐标处理

#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#include <cstring>using namespace std;vector <vector <char> > a;const int maxn = 1e6+10;int xmax[maxn];int ymax[maxn];//int **a;int main(){    int n,m,t=0;    while(scanf("%d%d",&n,&m)!=EOF)    {        t++;        printf("Case #%d:\n",t);        getchar();        a.clear();   //     a=new int *[n];        for(int i=0;i<n;i++)        {            xmax[i]=i;        }        for(int j=0;j<m;j++)        {            ymax[j]=j;        }        for(int i=0;i<n;i++)        {     //       a[i]=new int[n];            vector <char> b;            b.clear();            for(int j=0;j<m;j++)            {                char temp;                scanf("%c",&temp);     //           a[i][j]=temp;                b.push_back(temp);            }            getchar();            a.push_back(b);        }        int q,c,x,y;        scanf("%d",&q);        while(q--)        {            scanf("%d%d%d",&c,&x,&y);            x--;            y--;            switch(c)            {                case 1:                    if(a[xmax[x]][ymax[y]]=='T')                        printf("Tree\n");                    else if(a[xmax[x]][ymax[y]]=='i')                        printf("Phone\n");                    else                        printf("Empty\n");                    break;                case 2:                    int temp;                    temp=xmax[x];                    xmax[x]=xmax[y];                    xmax[y]=temp;                  /*  for(int j=0;j<m;j++)                    {         //               swap(a[x],a[y]);                        char temp;                        temp=a[x][j];                        a[x][j]=a[y][j];                        a[y][j]=temp;                    }*/                    break;                case 3://                    int temp;                    temp=ymax[x];                    ymax[x]=ymax[y];                    ymax[y]=temp;                  /*  for(int i=0;i<n;i++)                    {                        char temp;                        temp=a[i][x];                        a[i][x]=a[i][y];                        a[i][y]=temp;                    }*/                    break;            }        }    //    free(a);    }    return 0;}

1061: A+B of lw

思路:分数计算,辗转相除最大公约数板子

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <map>#include <cmath>#include <string>#include <queue>#include <stack>#include <cmath>using namespace std;const int maxn = 1e5+10;int gcd(int a,int b){return b == 0 ? a : gcd(b, a % b);}int main(){    int a1,a2,b1,b2,c1,c2,re1,re2;    while(scanf("%d/%d %d/%d",&a1,&a2,&b1,&b2)!=EOF)    {        //cout << a1 << a2 << endl;        c2 = a2*b2;        c1 = a1*b2+a2*b1;        re1 = c1/gcd(c1,c2);        re2 = c2/gcd(c1,c2);        printf("%d/%d\n",re1,re2);    }    return 0;}

1060: 坑爹的杜神

思路:手动模拟四舍五入,注意补0和进位

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <map>#include <cmath>#include <string>#include <queue>#include <stack>using namespace std;const int maxn = 1e5+10;int main(){    long long num;    while(scanf("%lld",&num)!=EOF)    {        bool pl = false;        if(num % 10LL >= 5LL)        {            pl = true;        }        long long lef1 = num/10LL%10LL;        long long lef2 = num/100LL%10LL;        num /= 1000LL;        if(pl)        {            lef1++;            if(lef1==10)            {                lef1=0;                lef2++;                if(lef2==10)                {                    lef2=0;                    num++;                }            }        }        printf("%lld.%lld%lld\n",num,lef2,lef1);    }    return 0;}

瞬间做了10到水题,ranting上升到了12,下一个目标估计就是破百了,以后找时间再加油吧。


文章地址:http://blog.csdn.net/owen_q/article/details/78444381

原创粉丝点击