zoukankan      html  css  js  c++  java
  • 【题解】洛谷 P6368 [COCI2006-2007#6] MAGIJA

    题目大意

    给出一个(r imes m)的由“#”和“.“组成的矩阵,要求将此矩阵以右边界和下边界为对称轴对称和以右下角为对对称点中心对称后得到的((2r imes 2m))新矩阵。并将指定的((x,y))位置上的字符进行变换。

    分析

    看完题目:模拟大法好哇!

    但是感觉开三个for好麻烦……

    我们先对几个点的变换进行分析:
    ((1,1) o(1,4),(4,1),(4,4))((2,2) o(2,3),(3,2),(3,3))……

    由此我们可以发现:
    ((x,y) o(x,2 imes m-y+1),(2 imes n-x+1,y),(2 imes n-x+1,2 imes m-y+1))

    结论有了,标程还会远吗?

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,x,y;
    char a[201][201];
    int dx[3]={0,1,1},dy[3]={1,0,1};
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			cin>>a[i][j];
    	scanf("%d%d",&x,&y);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			for(int k=0;k<3;k++){
    				int xx=dx[k]?(2*n-i+1):i,yy=dy[k]?(2*m-j+1):j;
    				a[xx][yy]=a[i][j];
    			}
    	if(a[x][y]=='#') a[x][y]='.';
    	else a[x][y]='#';
    	for(int i=1;i<=n*2;i++){
    		for(int j=1;j<=m*2;j++)
    			cout<<a[i][j];
    		cout<<endl;
    	}
    	return 0;
     } 
    

    完结撒fa~

  • 相关阅读:
    如何判断DataSet里有多少个DataTable
    ADO.NET五大对象详解
    c# 中的封装、继承、多态详解
    什么是递归算法
    反射是什么
    什么是泛型
    方法中参数的类型详细
    Struts2学习笔记二 配置详解
    Struts2学习笔记一 简介及入门程序
    Hibernate学习笔记四 查询
  • 原文地址:https://www.cnblogs.com/unknown-year/p/13876610.html
Copyright © 2011-2022 走看看