1 条题解

  • 0
    @ 2025-8-24 21:48:40

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar NKU_AI_HMX
    New start......

    搬运于2025-08-24 21:48:40,当前版本为作者最后更新于2020-04-26 22:11:24,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这篇题解主要为不太清楚map用法的同学服务,这题用数组即可。(不会map还是尽快学会,可问度娘,或者写一下线性表

    主体思路和楼下楼上的大佬一样,先读取输入的两个字符串,然后选取他们各自的第一位第二位组成一个26进制数,然后通过判断数是否相等来判断是否符合要求,这里需注意,城市前两个字母和省的字母相同的情况。

    #include<bits/stdc++.h>
    using namespace std;
    int city[676][676], n, x, y, ans;//x表示城市前两个字母的26进制下的数,y是省份的。数相等则对应的省的两个字母和城市的前两个字母就相等。
    int main() {
        string a, b;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a>>b;
            x = (a[0] - 'A') * 26 + a[1] - 'A';//不减的话数据太大,数组开不了那么大(map的优势) 
            y = (b[0] - 'A') * 26 + b[1] - 'A';
            if (x != y) {//x==y的话如果要配对的话只会配到自己省。题目说了不在同一省,所以要排除。
                city[x][y]++;
                ans += city[y][x];
            }
        }
        cout<<ans;
        return 0;
    }
    
    • 1

    信息

    ID
    2441
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者