zoukankan      html  css  js  c++  java
  • 凉脾的比赛补题

    B - Game of Throwns

     Kattis - throwns 

    这道题目理解起来简单,但上手就会发现有很多小细节,如果疏忽,将导致错误。细节之一:学生的编号是0至n-1,而非1至n。

    容易处理的细节:判断输入的是数字还是undo,可以直接判断输入的字符串的第一个字符是否为‘u’。若不是,则为数字。反之,则为undo。

    也可以用一个函数——isdigit(string[0]),来判断输入的字符串的第一个字符是否为数字,从而判断输入的是数字还是undo。

    不好处理的细节:如何将字符串转化为整形数字。这里就必须用到一个函数——stoi(string)。此函数能将输入的数字字符串转化为整形数字,既快速又简洁。

    需要思维的地方:顺时针旋转和逆时针旋转后落位问题。

    顺时针比较简单:转后位置=(当前位置+转数)%n。

    逆时针则相对较难:首先求出转数对n求余后的数。然后把该数与当前位置数相比,若该数小于等于当前位置数,则转后位置=当前位置-该数。若该数大于当前位置数,则转后位置=当前位置+n-该数。

    记录实际走的步数:若遇到undo则减去要减去的步数,否则++,就能很好应对undo的操作,最后输出实际最后一步的位置即可。

    代码如下:

    #include<iostream>
    using namespace std;
    char str[10];
    int ans[110];
    int main()
    {
        int n,k;
        int shiji=0;
        scanf("%d%d",&n,&k);
        for(int i=1;i<=k;i++)
        {
            cin>>str;
            if(isdigit(str[0])||str[0]=='-')
            {
                shiji++;
                int p=stoi(str);
                if(p>0) ans[shiji]=(ans[shiji-1]+p)%n;
                else 
                {
                    int p2=-p%n;
                    if(p2<=ans[shiji-1])
                    ans[shiji]=ans[shiji-1]-p2;
                    else 
                    ans[shiji]=ans[shiji-1]+n-p2;
                }
            }
            else 
            {
                int undo;
                scanf("%d",&undo);
                shiji-=undo;
            }    
        }
        printf("%d",ans[shiji]);
    return 0;
    } 
  • 相关阅读:
    Kafka基础
    操作系统实验(一)-Shell编程
    计算机组成原理05-系统总线(下)
    计算机组成原理04-系统总线
    计算机组成原理03-概论思考
    计算机组成原理02-系统概论(下)
    计算机组成原理01-系统概论
    Python&&Pip
    我的爱情观
    node.js简介
  • 原文地址:https://www.cnblogs.com/Cnxz/p/12249309.html
Copyright © 2011-2022 走看看