2 条题解

  • 1
    @ 2024-7-14 23:03:04

    首先我们看数据范围是 3n,m10183 \le n,m \le 10^{18},因此直接考虑 n,mn,m 大于等于 33 时的情况。

    发现将棋盘黑白染色后两人各走 11 步后,cyx 将会走向与当前格子异色的格子,而 gmx 将会走向与当前格子同色的格子。

    因此对于 (n+m)mod2=1(n+m) \bmod 2 = 1 时的情况,cyx 必胜。

    然后我们计算出在目标点坐标 (3,3)(3,3) 时,cyx 需要走 44 步,而 gmx 需要走 22 步,此时 gmx 取胜(这里出题人已经给了,非常良心!)。

    接下来我们计算出在目标点坐标 (3,5)(3,5) 时,cyx 需要走 44 步,而 gmx 需要走 55 步,此时 cyx 取胜。

    接下来我们计算出在目标点坐标 (5,5)(5,5) 时,cyx 需要走 44 步,而 gmx 需要走 44 步,此时平局(这里出题人已经给了,非常良心!)。

    而接下来的情况,我们可以发现 cyx 每次可以走 33 格,而 gmx 每次只能走 22 格,因此 cyx 调整的机会是一定比 gmx 要多的。

    因此对于除以上的所有情况,cyx 均可取胜。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll t,n,m;
    void solve()
    {
    	cin>>n>>m;
    	if(n==5 && m==5)
    		cout<<"Wuxi\n";
    	else if(n==3 && m==3)
    		cout<<"G\n";
    	else
    		cout<<"C\n";
    }
    int main()
    {
     	cin>>t;
    	while(t--)
    		solve();
    }
    
    • 0
      @ 2024-7-15 6:12:56

      注意到当格点规模很大时,小 C 跑得一定是比小 G 快的。因此只要特判一些小情况。

      经过验证后发现,这些小情况就是样例里的数据 1122

      #include<bits/stdc++.h>
      using namespace std;
      
      void sol()
      {
      	long long n,m;
      	cin>>n>>m;
      	puts(n==3&&m==3?"G":n==5&&m==5?"Wuxi":"C");
      }
      
      int main()
      {
      	int t;
      	cin>>t;
      	while(t--) sol();
       	return 0;
      }
      
      • 1

      信息

      ID
      1045
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      递交数
      61
      已通过
      7
      上传者