P2129 L国的战斗续之多路出击

题目背景

广而告之:背景见其他L国的战斗!!大家一起刷

题目描述

这一次,L国决定军队分成n组,分布在各地,若以L国为原点,可以看作在一个直角坐标系内。但是他们都受统一的指挥,指令部共发出m个命令。命令有移动、上下转移和左右转移(瞬移??),但是由于某些奇奇怪怪的原因,军队收到命令总是有延迟,为了方便,军方已经写好一个栈(那还要我干嘛,自己都写好不就行了?),所以你要处理的顺序,应该是从后往前。

输入输出格式

输入格式:

输入文件army.in包括n+m+1行

第一行两个整数n、m

接下来n行

第i行有两个整数xi yi表示第i支军队的位置。

又是m行

每行首先是一个字符 C

若C为m 则紧跟两个整数 p q 表示把每支军队的位置从(xi,yi)移到(xi+p.yi+q)

若C为x 则表示把每支军队的位置从(xi,yi)移到(-xi,yi)

若C为y 则表示把每支军队的位置从(xi,yi)移到(xi,-yi)

输出格式:

输出文件army.out包含n行

第i行有两个整数xi、yi,表示第i支军队移动后的位置。

输入输出样例

输入样例#1:

3 3
0 0
4 -3
6 7
x
m -1 2
y
输出样例#1:

1 2
-3 5
-5 -5

说明

对于30%的数据 1≤n≤1000 1≤m≤1000

对于100%的数据 1≤n≤500000 1≤m≤500000 Ai在longint范围内

标签是矩阵乘法啊,但蒟蒻不会,只会模拟...还只会80分模拟...太弱了!!!

#include<iostream>
#include<cstdio>
#include<cstring> #define N 500007 using namespace std;
int n,m,tot=,cnt;
int a[N][],pos[N];
struct node
{
char c;
int x,y;
}com[N]; struct Lim
{
int x,y;
}lim[N]; inline int init()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
n=init();m=init();
for(int i=;i<=n;i++)
a[i][]=init(),a[i][]=init();
for(int i=m;i>;i--)
{
cin>>com[i].c;
if(com[i].c=='m') com[i].x=init(),com[i].y=init();
}
for(int i=;i<=m;i++)
{
if(com[i].c=='x') lim[tot].x++;
else if(com[i].c=='y') lim[tot].y++;
else tot++,pos[tot-]=i;
}
for(int i=;i<=tot;i++)
{
if(lim[i].x%!=) for(int j=;j<=n;j++) a[j][]=-a[j][];
if(lim[i].y%!=) for(int j=;j<=n;j++) a[j][]=-a[j][];
for(int j=;j<=n;j++)
{
a[j][]+=com[pos[i]].x;
a[j][]+=com[pos[i]].y;
}
}
for(int i=;i<=n;i++)
printf("%d %d\n",a[i][],a[i][]);
}

80分

想到了提前记录总和,但考虑到取反的时候会出问题,但没想到去反可以吧总和也取反...太弱了!!!!

#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
const int maxn=,INF=;
int X[maxn],Y[maxn],a[maxn],b[maxn];
char cmd[maxn]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
int N=read(),M=read(),p=,q=,curx=,cury=;
char c;
for(int i=; i<=N; i++) X[i]=read(),Y[i]=read();
for(int i=; i<M; i++)
{
c=getchar();
while(c!='x'&&c!='m'&&c!='y') c=getchar();
cmd[i]=c;
if(c=='m')
{
a[i]=read();
b[i]=read();
}
}
for(int i=M-; i>=; i--)
{
if(cmd[i]=='x') p=-p,curx=-curx;
else if(cmd[i]=='y') q=-q,cury=-cury;
else
{
p+=a[i];
q+=b[i];
}
}
for(int i=; i<=N; i++) printf("%d %d\n",X[i]*curx+p,Y[i]*cury+q);
return ;
}

洛谷 P2129 L国的战斗续之多路出击(模拟)的更多相关文章

  1. P2129 L国的战斗续之多路出击

    题目描述 这一次,L国决定军队分成n组,分布在各地,若以L国为原点,可以看作在一个直角坐标系内.但是他们都受统一的指挥,指令部共发出m个命令.命令有移动.上下转移和左右转移(瞬移??),但是由于某些奇 ...

  2. 【题解】L 国的战斗续之多路出击 [P2129]

    [题解]L 国的战斗续之多路出击 [P2129] 传送门: \(L\) 国的战斗续之多路出击 \([P2129]\) [题目描述] 给出 \(n\) 个坐标,\(m\) 个指令,指令处理顺序应是从后往 ...

  3. [luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)

    传送门 1.模拟 easy #include <cstdio> #define N 500001 int n, m; int X[N], Y[N], x[N], y[N], a = 1, ...

  4. 洛谷 P1910 L国的战斗之间谍

    洛谷 P1910 L国的战斗之间谍 传送门 思路 二维背包模板题 三维肯定会爆掉,所以换二维 代码 #include <bits/stdc++.h> #define N 1111 usin ...

  5. 洛谷 P1910 L国的战斗之间谍(水题日常)

    题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间谍前往I国,于是,选人工作就落到了你身上. 你现在有N个人选,每个人都有这样一些数据:A(能得到 ...

  6. 洛谷——P1910 L国的战斗之间谍

    https://www.luogu.org/problem/show?pid=1910#sub 题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间 ...

  7. 洛谷 P1913 L国的战斗之伞兵

    P1913 L国的战斗之伞兵 题目背景 L国即将与I国发动战争!! 题目描述 为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区… ...

  8. 洛谷 P1911 L国的战斗之排兵布阵

    P1911 L国的战斗之排兵布阵 题目背景 L国即将与I国发动战争!! 题目描述 L国的指挥官想让他的每一个军营都呈现出国徽形——“L”形(方向无所谓).当然,他的指挥营除外(这叫做个性),他想不出该 ...

  9. 洛谷P1910 L国的战斗之间谍

    //二维费用01背包 #include<bits/stdc++.h> using namespace std; ; ; ; int v1[maxn],v2[maxn],w[maxn],n, ...

随机推荐

  1. 常见Android安装启动失败问题

    1.INSTALL_FAILED_VERSION_DOWNGRADE版本过低2.Failed to install Funm_AND.apk on device 'QWOJLVR8KNHYA6NR': ...

  2. Centos6.6 安装基于系统认证的vsftp服务

    一.介绍 vsftp是一款文件服务器软件,在文件共享,代码更新,文件备份中也是经常用到,以下是基本安装环境: 1)CentOS6.6 2)vsftpd-2.2.2 二.安装 $ yum install ...

  3. UGUI世界坐标转换为UI本地坐标(游戏Hud的实现)

    实现世界坐标的原理是: 世界坐标和UGUI的坐标分属两个坐标系,他们之间是无法进行转换的,需要通过屏幕坐标系来进行转换(因为屏幕坐标是固定的),即先将游戏场景中的世界坐标通过游戏场景Camera转化为 ...

  4. [C#] Linq 动态条件查询

    应用背景:以货品为例,在基础数据中配置货品的判断规则,要根据这个规则筛选出符合条件的集合. 创建货品类 public class Product { public string Name { get; ...

  5. (C/C++学习)5.C++中的虚继承-虚函数-多态解析

    说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...

  6. Mac下对Android apk反编译

    在Mac上进行反编译apk,需要三个工具,分别为(附下载地址): apktool,下载Mac版 作用:资源文件获取,能够提取出图片文件和布局文件进行使用查看 dex2jar,下载最新的即可,目前是2. ...

  7. 1. Python中的基本数据类型、运算、变量

    本文利用的是Python 3.x版本,建议学习3.x版本 Python中的基本数据类型.运算.变量 1. 基本数据类型 1.1 整数 py可以处理任意大小的整数,例如123,1234567891324 ...

  8. ubuntu16.04 安装 eclipse

    从官网下载 eclipse 的 linux 版本 eclipse-cpp-neon-1a-linux-gtk-x86_64.tar.gz 直接解压就能得到一个可运行的IDE,但是直接点击 eclips ...

  9. net core 配置Redis Cache

    参考文章地址:https://dotnetcoretutorials.com/2017/01/06/using-redis-cache-net-core/ 具体步骤: 1   Install-Pack ...

  10. noip模拟赛 第k大区间

    [问题描述] 定义一个长度为奇数的区间的值为其所包含的的元素的中位数. 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少. [输入] 输入文件名为kth.in. 第一行两个数n和k ...