SDUT2190救基友记1

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2190

思路 : 这个题,一开始以为是博弈,以为大概几行核心代码就搞的定,结果应该算是一个简单数学小题吧,考的是思维。按题中要求,可以得出,主要分为两种情况,一种是考虑这一数串的每个数字之和能被三整除和不能被三整除的,如果能被三整除,就判断被3整除的数字的个数有奇数个还是偶数个,如果是奇数个就是妖怪输。而不能被三整除的时候,就要去看和对3取余余几 ,如果余的数在原串里找得到或者是原串某个数对3取余与这个余数相等,那第一步的WP就必须拿掉这个数才符合规则,所以剩下的又是判断剩下的数中能被3整除的数是奇数个还是偶数个

#include<iostream>

#include<string>

using namespace std ;

int main()

{

    int n ;

    cin>>n;

    for(int i = 0 ; i < n ; i++)

    {

        string str ;

        cin>>str ;

        int sum = 0 ;

        int cnt = 0 ;

        for(int j = 0 ; j < str.length() ; j++)

        {

            sum += (str[j]-'0') ;

            if(str[j] % 3 == 0)

                cnt++ ;

        }

        int flag = 0 ,mark = 0;

        if(sum % 3 == 0)

        {

            if(cnt % 2 == 0)

            {

                flag = 1 ;

            }

        }

        else

        {

            int len = sum%3 ;

            for(int j = 0 ; j < str.length() ; j++)

            {

                if(len == (str[j]-'0')%3)

                {

                    mark = 1;

                    break ;

                }

            }

            if(mark)

            {

                if(cnt%2 == 1)

                {

                    flag = 1 ;

                }

            }

        }

        cout<<"Case "<<i+1<<": ";

        if(flag)

            cout<<"T"<<endl ;

        else

            cout<<"S"<<endl ;

    }

    return 0 ;

}
View Code

 

 

你可能感兴趣的:(du)