• 小W学物理


    问题描述

    为了测试小W的物理水平,Mr.X在二维坐标系中放了N面镜子(镜子坐标绝对值不超过M),镜子均与坐标轴成45°角,所以一共有两种类型“/”和“”。原点不会有镜子,任意一点最多只有一面镜子。
        镜子两个面都能反光,而中间不透光,例如,对于一个“/”型镜子,下方向射入的光线会被反射到右方向,左方向射入的光线会被反射到上方向。
        现在有一条光线从原点沿X轴正方向射出,求走过T路程后所在位置。

    输入

    第一行三个整数N,M,T。
        第2到N+1行,每行两个整数Xi,Yi,表示镜子坐标,一个字符Si表示镜子类型

    数据保证镜子的位置不会重复

    输出

        一行两个整数,表示走过T路程后的坐标。

    样例 

    mir.in

    5 2 8
    0 1
    0 2 /
    1 0 /
    1 1
    1 2

     

    mir.out

    3 1

     

    数据范围

    对于不同的测试点,我们约定各种参数的规模不会超过如下

    测试点标号

    N

    M

    T

    1

    1

    1000

    1000000

    2

    100000

    3

    4

    1000

    5

    6

    10^18

    7

    8

    1

    10^9

    9

    1000

    10

    11

    100000

    1000

    12

    13

    14

    1000000

    15

    16

    17

    10^9

    10^18

    18

    19

    20


    思路: 

    30暴力,注意:将原点移至(1000,1000)

    code

    #include<stdio.h>
    #include<algorithm> 
    using namespace std;
    const int mxn=100010,M=1000;
    bool vis[1010][1010];
    int n,m,T,mp[2010][2010],tur[5][5];
    int dx[]={0,0,0,-1,1};
    int dy[]={0,1,-1,0,0};
    
    void biao() {
        tur[1][1]=4,tur[1][2]=3;
        tur[2][1]=3,tur[2][2]=4;
        tur[3][1]=2,tur[3][2]=1;
        tur[4][1]=1,tur[4][2]=2;
    }
    void file() {
        freopen("mir.in","r",stdin);
        freopen("mir.out","w",stdout);
    }
    int main() 
    {
    //    file();
        scanf("%d%d%d",&n,&m,&T);
        for(int i=1;i<=n;++i) {
            int x,y;
            char cas[2];
            scanf("%d%d%s",&x,&y,cas);
            if(cas[0]=='/') mp[x+M][y+M]=1;
            else mp[x+M][y+M]=2;
        }
        biao();
        int x=0,y=0,k=4;
        while(T--) {
            x+=dx[k],y+=dy[k];
            if(mp[x+M][y+M]==1) k=tur[k][1];
            else if(mp[x+M][y+M]==2) k=tur[k][2];
        }
        printf("%d %d",x,y);
        return 0;
    }
    /*
    5 2 8
    0 1 
    0 2 /
    1 0 /
    1 1 
    1 2 
    */
  • 相关阅读:
    Gym
    Gym 100712H
    CodeForces
    CodeForces
    P1103 书本整理(DP)
    P1435 回文子串(最长公共子序列)
    P1095 守望者的逃离(线性DP)
    P1077 摆花(背包)
    P1832 A+B Problem(再升级)
    P1757 通天之分组背包(分组背包)
  • 原文地址:https://www.cnblogs.com/qseer/p/9877992.html
Copyright © 2020-2023  润新知