#include<algorithm> #include<iostream> using namespace std; const int N = 100010; struct node { double k; double thita; }Node[N]; int main() { Node[0].k = 1; Node[0].thita = 0; int n, m; int label; double data; cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> label >> data; if (label == 1) { Node[i].k = Node[i - 1].k * data; Node[i].thita = Node[i - 1].thita; } else { Node[i].thita = Node[i - 1].thita + data; Node[i].k = Node[i - 1].k; } } int l, r, x, y; while (m--) { cin >> l >> r >> x >> y; double sum = Node[r].thita - Node[l - 1].thita; double kk = Node[r].k / Node[l - 1].k; printf("%.3lf %.3lf\n", (x * cos(sum) - y * sin(sum)) * kk, (x * sin(sum) + y * cos(sum)) * kk); } return 0; }
运用了前缀和的算法,第一次暴力做的,运行会超时,只能得到80分
csp认证.坐标变换
最新推荐文章于 2024-07-23 17:36:37 发布