5 solutions

  • 1
    @ 2024-6-5 12:53:55

    题意

    求出有 多少对在 a州,b州 中 a州有b的城市(与b州名字相同) b州有a的城市(与a州名字相同) 的数量

    思路

    还是map大佬

    代码

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    map<string,int>m;//存储市和州的对数
    int sum=0;
    int main()
    {
        int n;
        cin>>n;//输入
        for(int i=0;i<n;i++)
        {
            string a,s,b;
            cin>>s>>b;//输入
            a+=s[0];//截取
            a+=s[1];//截取
            if(a!=b)
            {
                sum+=m[a+b];//类似记忆化
                m[b+a]++;//增加(相互同名)对数
            }
        }
        cout<<sum;//输出
        return 0;//完结散花
    }
    
    • 1
      @ 2024-5-22 13:49:35

      题意

      求有多少『特殊』的城市

      『特殊』的城市:

      • 城市 c1c1 所在的州 s1s1 等于城市 c2c2 的前两个字母
      • 城市 c2c2 所在的州 s2s2 等于城市 c1c1 的前两个字母

      PS:多个城市可以在同一个州

      思路

      用 map 写。

      ss 城市 cc 的『特殊』的城市是所有索引为 cscs(前面是州名,后面是城市名)的城市,同时索引为 scsc 的城市加 1。

      代码

      #include <bits/stdc++.h>
      using namespace std;
      unordered_map<string,int> a;
      int cnt;
      int main(int argc, char **argv){
      	int n;
      	cin >> n;
      	for (int i = 0;i < n;i++){
      		string c,s;	// s 州,c 城市
      		cin >> c >> s;
      		c = c.substr(0,2);	// 只取前面两个字符
      		if (c != s){	// 州和城市的名字不一样
      			cnt += a[c + s];	// 所有以 c 为州,且 s 是城市的序列
      			a[s + c]++;	// 这一个加到以 s 为州,c 为城市的序列
      		}
      	}
      	cout << cnt;
      	return 0;
      }
      

      参考与鸣谢

      参考了 @ 的代码

      • @ 2024-5-23 21:26:37

        题意

        求出有 多少对在 a州,b州 中 a州有b的城市(与b州名字相同) b州有a的城市(与a州名字相同) 的数量

        思路

        还是map大佬

        代码

        #include<iostream>
        #include<map>
        #include<string>
        using namespace std;
        map<string,int>m;//存储市和州的对数
        int sum=0;
        int main()
        {
            int n;
            cin>>n;//输入
            for(int i=0;i<n;i++)
            {
                string a,s,b;
                cin>>s>>b;//输入
                a+=s[0];//截取
                a+=s[1];//截取
                if(a!=b)
                {
                    sum+=m[a+b];//类似记忆化
                    m[b+a]++;//增加(相互同名)对数
                }
            }
            cout<<sum;//输出
            return 0;//完结散花
        }
        

        参考与鸣谢

        参考了 @ zengfj 的代码

    • 1
      @ 2024-5-22 13:37:22

      题意

      求出有 多少对在 a州,b州 中 a州有b的城市(与b州名字相同) b州有a的城市(与a州名字相同) 的数量

      思路

      还是map大佬

      代码

      #include<iostream>
      #include<map>
      #include<string>
      using namespace std;
      map<string,int>m;//存储市和州的对数
      int sum=0;
      int main()
      {
          int n;
          cin>>n;//输入
          for(int i=0;i<n;i++)
          {
              string a,s,b;
              cin>>s>>b;//输入
              a+=s[0];//截取
              a+=s[1];//截取
              if(a!=b)
              {
                  sum+=m[a+b];//类似记忆化
                  m[b+a]++;//增加(相互同名)对数
              }
          }
          cout<<sum;//输出
          return 0;//完结散花
      }
      
      • @ 2024-5-22 13:49:19

        要标明出处哦,借用了老师的代码就要写出来

      • @ 2024-5-22 13:53:30

        而且你的思路是咋回事?

    • 0
      @ 2024-5-23 21:26:41

      题意

      求出有 多少对在 a州,b州 中 a州有b的城市(与b州名字相同) b州有a的城市(与a州名字相同) 的数量

      思路

      还是map大佬

      代码

      #include<iostream>
      #include<map>
      #include<string>
      using namespace std;
      map<string,int>m;//存储市和州的对数
      int sum=0;
      int main()
      {
          int n;
          cin>>n;//输入
          for(int i=0;i<n;i++)
          {
              string a,s,b;
              cin>>s>>b;//输入
              a+=s[0];//截取
              a+=s[1];//截取
              if(a!=b)
              {
                  sum+=m[a+b];//类似记忆化
                  m[b+a]++;//增加(相互同名)对数
              }
          }
          cout<<sum;//输出
          return 0;//完结散花
      }
      

      参考与鸣谢

      参考了 @ zengfj 的代码

      • 0
        @ 2024-5-23 13:43:23

        题意

        求出有 多少对在 a州,b州 中 a州有b的城市(与b州名字相同) b州有a的城市(与a州名字相同) 的数量

        思路

        还是map大佬

        代码

        #include<iostream>
        #include<map>
        #include<string>
        using namespace std;
        map<string,int>m;//存储市和州的对数
        int sum=0;
        int main()
        {
            int n;
            cin>>n;//输入
            for(int i=0;i<n;i++)
            {
                string a,s,b;
                cin>>s>>b;//输入
                a+=s[0];//截取
                a+=s[1];//截取
                if(a!=b)
                {
                    sum+=m[a+b];//类似记忆化
                    m[b+a]++;//增加(相互同名)对数
                }
            }
            cout<<sum;//输出
            return 0;//完结散花
        }
        

        参考与鸣谢

        参考了 @ zengfj 的代码

      • 1

      Information

      ID
      252
      Time
      1000ms
      Memory
      125MiB
      Difficulty
      8
      Tags
      # Submissions
      79
      Accepted
      10
      Uploaded By