USACO Section 1.1 Your Ride Is Here 解题报告

时间:2022-06-28 14:40:55

题目

问题描述

将字符串转变为数字,字母A对应的值为1,依次对应,字母Z对应的值为26。现在有一个字符串,将其中的每个字符转变为数字之后进行累乘,最终的结果对47求余数。
题目给你两个字符串,其中的字符都是大写字母,如果通过上述处理,两个字符串最终转变的数字结果是相等的,输出GO,否则输出STAY。

输入样例

COMETQ
HVNGAT

输出样例

GO

解题思路

该题主要让我们熟悉USACO的文件输入输出方式,是一个简单的模拟。USACO有一个特点就是必须在每份代码中用注释的方式,填写自己的用户名、题目名称,还有使用的编程语言,注意要进行文件输入输出。

为了与我之前ACM的风格保持一致,我在代码中用了重定向的方式来进行文件输入输出。重定向的部分写在了#ifdef#endif中。只有定义了MARK符号才会编译两条freopen语句。我如果想要在本机命令窗口进行输入输出,只需要将#define MARK语句注释掉即可。在提交到oj之前把注释取消。

解题代码

/*
ID: yinzong2
PROG: ride
LANG: C++11
*/
#define MARK

#include<cstdio>
#include<iostream>
#include<fstream>
#include<string>
#include<cstring>

using namespace std;

const int maxn = 10;

int main() {
#ifdef MARK
    freopen("ride.in", "r", stdin);
    freopen("ride.out", "w", stdout);
#endif
    char str1[maxn], str2[maxn];
    cin >> str1 >> str2;
    int len1 = strlen(str1);
    int ans1 = 1;
    int len2 = strlen(str2);
    int ans2 = 1;
    for(int i = 0; i < len1; i++) {
        ans1 *= (str1[i] - 'A' +1);
    }
    ans1 %= 47;
    for(int i = 0; i < len2; i++) {
        ans2 *= (str2[i] - 'A' +1);
    }
    ans2 %= 47;
    if(ans1 == ans2) {
        cout << "GO" << endl;
    } else {
        cout << "STAY" << endl;
    }
    return 0;
}