#include <iostream> #define trueOpIndex index-n-1 #define CURRENT_OPERATION operations[index-n-1] struct Operation{ int left; int right; char type;// 1-sum 2-product 3-negation(right = undefined) }; bool inSubset(int value, int index, int n, Operation* operations){ if(index<=n){ return !(value%index); } switch(operations[trueOpIndex].type){ case '1': return inSubset(value, CURRENT_OPERATION.left, n, operations) || inSubset(value, CURRENT_OPERATION.right, n, operations); case '2': return inSubset(value, CURRENT_OPERATION.left, n, operations) && inSubset(value, CURRENT_OPERATION.right, n, operations); case '3': return !(inSubset(value, CURRENT_OPERATION.left, n, operations)); default: return false; } return false; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); unsigned int n, m, q; std::cin >> n >> m >> q; Operation* operations = (Operation*)malloc(sizeof(Operation)*m); for(int i = 0; i < m; i++){ Operation op; char type; int left; std::cin >> type >> left; op.left = left; op.type = type; if(type == '3'){ operations[i] = op; continue; } int right; std::cin >> right; op.right = right; operations[i] = op; } for(int i = 0; i < q; i++){ int subsetIndex, value; std::cin >> subsetIndex >> value; if(value <= n && inSubset(value,subsetIndex,n,operations)){ std::cout << "TAK\n"; } else{ std::cout<< "NIE\n"; } } free(operations); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <iostream> #define trueOpIndex index-n-1 #define CURRENT_OPERATION operations[index-n-1] struct Operation{ int left; int right; char type;// 1-sum 2-product 3-negation(right = undefined) }; bool inSubset(int value, int index, int n, Operation* operations){ if(index<=n){ return !(value%index); } switch(operations[trueOpIndex].type){ case '1': return inSubset(value, CURRENT_OPERATION.left, n, operations) || inSubset(value, CURRENT_OPERATION.right, n, operations); case '2': return inSubset(value, CURRENT_OPERATION.left, n, operations) && inSubset(value, CURRENT_OPERATION.right, n, operations); case '3': return !(inSubset(value, CURRENT_OPERATION.left, n, operations)); default: return false; } return false; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); unsigned int n, m, q; std::cin >> n >> m >> q; Operation* operations = (Operation*)malloc(sizeof(Operation)*m); for(int i = 0; i < m; i++){ Operation op; char type; int left; std::cin >> type >> left; op.left = left; op.type = type; if(type == '3'){ operations[i] = op; continue; } int right; std::cin >> right; op.right = right; operations[i] = op; } for(int i = 0; i < q; i++){ int subsetIndex, value; std::cin >> subsetIndex >> value; if(value <= n && inSubset(value,subsetIndex,n,operations)){ std::cout << "TAK\n"; } else{ std::cout<< "NIE\n"; } } free(operations); return 0; } |