题解:P15959 [ICPC 2018 Jakarta R] Lie Detector

· · 题解

题目看似很长,其实意思是很简单的。

根据题目意思模拟即可

我们需要一个数组来存储每一个测谎仪的真假,输入时如果是真的就设为1,否则设为0。

我们还需要一个变量来存储当前的测谎仪是真是假,从最后一个开始,当前是真的就为1,否则为0。就这样一步步往后找,全部找完之后就为目击者证词的真假了——因为最终的值为第一个测谎仪的真假,如果是真的则目击者说的话就是测谎仪测出来的,否则就与测谎仪测出来的相反,这一部分大家可以思考一下,我认为可能有点绕。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=100010;//数组大小 
int n,a[N],num;//num:存储当前的测谎仪是真是假  a[N]:存储每一个测谎仪的真假
string s;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        if(s=="TRUTH")
        {
            a[i]=1;
        }
        else
        {
            a[i]=0;
        }
    }
    if(a[n]==1)//先判断最后一个 
    {
        num=1;
    }
    for(int i=n-1;i>=1;i--)
    {
        if(a[i]==0)
        {
            if(num==0)
            {
                num=1;
            }
            else
            {
                num=0; 
            }
        }
    }
    if(num==1)//真话 
    {
        cout<<"TRUTH";
    }
    else//假话 
    {
        cout<<"LIE";
    }
    return 0;
}