zoukankan      html  css  js  c++  java
  • 题解 CF645A Amity Assessment

    \[\text{题目大意} \]

    \(\quad\)有一个 2$\times$2 的网格,每个格子中是字母 \(A,B,C,X\) 中的一个;

    \(\quad\)你可以进行若干次操作:每次操作中,你选择含字母 \(X\) 的格子和一个与之相邻的格子交换;

    \(\quad\)给定网格的初始状态和最终状态,问是否可以通过有限次操作从初始状态到达最终状态?

    \[\text{思路} \]

    \(\quad\)根据多年划水经验,只需要判断三个字母 \(A,B,C\) 之间的位置关系即可,因为可以和含 \(X\) 的格子交换,所以忽略这个格子,考虑顺时针顺序即可。

    \(\quad\)可以玩玩Windows上的小游戏,这个叫图片拼图板,找找规律(一本正经)。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #define re register int
    #define il inline
    using namespace std;
    il void print(int x)
    {
      if(x<0)putchar('-'),x=-x;
      if(x/10)print(x/10);
      putchar(x%10+'0');
    }
    il int min(int x,int y){return x<y?x:y;}
    int t1,t2;
    char a[4],b[4];
    signed main()
    {
    	for(re i=1;i<=4;i++)
    	{
    		cin>>a[i-1];
    		if(a[i-1]=='A')t1=i;//找出A的位置
    	}
    	for(re i=1;i<=4;i++)
    	{
    		cin>>b[i-1];
    		if(b[i-1]=='A')t2=i;
    	}
    	int x,y;//判断顺时针方向A的下一个字母
    	if(t1==1)x=a[1]!='X'?a[1]:a[3];
    	else if(t1==2)x=a[3]!='X'?a[3]:a[2];
    	else if(t1==3)x=a[0]!='X'?a[0]:a[1];
    	else x=a[2]!='X'?a[2]:a[0];
    	if(t2==1)y=b[1]!='X'?b[1]:b[3];
    	else if(t2==2)y=b[3]!='X'?b[3]:b[2];
    	else if(t2==3)y=b[0]!='X'?b[0]:b[1];
    	else y=b[2]!='X'?b[2]:b[0];
    	if(x==y)puts("YES");else puts("NO");
    	return 0;
    }
    

    \[\text{后话} \]

    \(\quad\)本题的双倍经验:P7724 远古档案馆(Ancient Archive)

    \(\quad\)我的记录

  • 相关阅读:
    Pascal's Triangle
    Pascal's Triangle II
    贪心算法入门
    Jump Game
    Symmetric Tree
    Reverse Words in a String
    [BZOJ2342][Shoi2011]双倍回文
    [HDU3068]最长回文
    [POJ1984]Navigation Nightmare
    [BZOJ3295][Cqoi2011]动态逆序对
  • 原文地址:https://www.cnblogs.com/FarkasW/p/15463163.html
Copyright © 2011-2022 走看看