CF签到题

· · 题解

题目传送门

题意

大致是说有两个人正在进行交替操作,有几种条件、操作:

  1. 将一个数的任意两位进行交换

  2. 删除这个数末位数字

  3. 重复1、2,直到只剩一位数字

思路

根据输入的数的位数分成三类处理,设输入n的位数为k

当k=1,显而易见,只有一位数字,直接输出n

当k=2,两位数字会先交换一次(只能这么做),然后再删除末尾数字,所以输出n的个位

举例:

原数:13

交换:31

删除:3

当k>=3,很容易证明,每个数字都有方案保存到最后,所以只需输出n各数位上的最小值

具体实现请看代码

code

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int k=9;
        string s;//字符串处理方便
        cin>>s;
        if(s.size()==1) cout<<s[0];//第一类
        if(s.size()==2) cout<<s[1];//第二类
        else//第三类
        {
            for(int i=0;i<s.size();i++)
                k=min(k,s[i]-'0');
            cout<<k;
        }
        cout<<endl;
    }
    return 0;
}