NC200582. 被诅咒的WWT
描述
输入描述
第一行输入三个数X,Y,Z,0<=X,Y,Z<=1000。
第二行输入一个正整数q次 q<=10000
接下来的q行输入q次一个点O,-10^9<=O<=10^9
输出描述
对于每次询问输出一行YES或NO
示例1
输入:
2 3 5 1 6
输出:
YES
C++14(g++5.4) 解法, 执行用时: 22ms, 内存消耗: 592K, 提交时间: 2020-04-11 15:18:32
#include<bits/stdc++.h> using namespace std; int main() { set<int>s; int x,y,z; int q; cin>>x>>y>>z; s.insert(0); set<int>s1; for(int i=1; i<=12; i++) { // cout<<i<<endl; for(auto it:s) { s1.insert(it+x); s1.insert(it-x); s1.insert(it+y); s1.insert(it+z); s1.insert(it-y); s1.insert(it-z); } s.clear(); s=s1; s1.clear(); } cin>>q; int now=0; while(q--) { int start; cin>>start; if(s.count(start-now)) { cout<<"YES"<<endl; now=abs(start-now); } else { now=0; cout<<"NO"<<endl; } } }
C++11(clang++ 3.9) 解法, 执行用时: 29ms, 内存消耗: 536K, 提交时间: 2020-01-10 13:22:14
#include<bits/stdc++.h> using namespace std; int x,y,z,q,s(0),t; set<int>ss,tt; void init(int n){ if(n==12) return; tt.clear(); for(int r:ss){ tt.insert(r-x),tt.insert(r+x), tt.insert(r-y),tt.insert(r+y), tt.insert(r-z),tt.insert(r+z); } ss=tt; init(++n); } int main(){ ss.insert(0); cin>>x>>y>>z>>q; init(0); while(q--){ cin>>t; if(ss.count(t-s)) cout<<"YES\n",s=abs(t-s); else cout<<"NO\n",s=0; } }