题解 P9714 「QFOI R1」摸摸
过氧化氢_syq0057 · · 题解
Solution
考虑分别观察两个操作。
观察操作 2 ,因为
这是我们再观察操作
这里我们注意,至少有一次正序
故题目转化为:是否可以通过任意个正序
因为
程序中我们用
Code
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <map>
using namespace std;
const int N = 2005;
const int M = 100005;
#define ll long long
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
int T;
int n;
int t[N], b[N];
bool check(int a1, int a2) {
for (int i=2; i<=n; i++)
if (t[i] * a1 + t[n - i + 1] * a2 != b[i])
return 0;
return 1;
}//判断是否t=b
int main() {
scanf("%d", &T);
int cnt; bool flag;
while (T--) {
flag = 0;
scanf("%d", &n);
for (int i=1; i<=n; i++)
scanf("%d", &t[i]);
for (int i=1; i<=n; i++)
scanf("%d", &b[i]);
for (int i=1; i<=b[1]/t[1]; i++) {//枚举正逆序t个数
if ((b[1] - t[1] * i) % t[n]) continue;//取不到b[1],显然不可
if (check(i, (b[1] - t[1] * i) / t[n])) {
printf("Yes\n");
flag = 1;
break;
}
}
if (!flag) printf("No\n");
}
return 0;
}