AcWing 5298. 坐标变换(其二)
原题链接
简单
作者:
不知名的fE
,
2024-11-30 23:17:07
,
所有人可见
,
阅读 2
其二
import java.util.*;
import java.io.*;
public class Main {
static final int N = 100010;
static int n, m;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out);
String[] str = br.readLine().split(" ");
n = Integer.parseInt(str[0]);
m = Integer.parseInt(str[1]);
double x0 = 1, y0 = 1;
ArrayList<Double> k = new ArrayList<>();
ArrayList<Double> xita = new ArrayList<>();
k.add(1.0);
xita.add(0d);
for (int i = 1; i <= n; i++) {
str = br.readLine().split(" ");
double type = Double.parseDouble(str[0]), value = Double.parseDouble(str[1]);
if (type == 1) {
k.add(k.get(i - 1) * value);
xita.add(xita.get(i - 1));
}
else {
k.add(k.get(i - 1));
xita.add(xita.get(i - 1) + value);
}
}
for (int i = 0; i < m; i++) {
str = br.readLine().split(" ");
int l = Integer.parseInt(str[0]), r = Integer.parseInt(str[1]);
double x = Double.parseDouble(str[2]), y = Double.parseDouble(str[3]);
double sum_xita = xita.get(r) - xita.get(l - 1);
double mul_k = k.get(r) / k.get(l - 1);
out.println(getAns(x, y, sum_xita, mul_k));
}
out.flush();
}
static String getAns(double x, double y, double xita, double k) {
return k * (x * Math.cos(xita) - y * Math.sin(xita)) + " " + k * (x * Math.sin(xita) + y * Math.cos(xita));
}
}