Advertisement
Darkdonkie

Untitled

May 29th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. //
  2. //  2017-01-03
  3. //  2017-01-03
  4. //
  5. //  Created by Jamie on 2017. 5. 21..
  6. //  Copyright © 2017년 Jamie. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <unordered_set>
  13.  
  14. using namespace std;
  15.  
  16. using mySet = unordered_set<int>;
  17.  
  18.  
  19. mySet calcSet(mySet a, mySet b) {
  20.     mySet result;
  21.    
  22.     if(a.size() == 0) return b;
  23.     if(b.size() == 0) return a;
  24.    
  25.     for( auto i : a) {
  26.         for( auto j : b) {
  27.             result.emplace(i+j);
  28.         }
  29.     }
  30.     return result;
  31. }
  32.  
  33. mySet mergeSet(mySet a, mySet b) {
  34.     mySet result;
  35.    
  36.     for(auto i : a) {
  37.         result.emplace(i);
  38.     }
  39.    
  40.     for( auto i : b) {
  41.         result.emplace(i);
  42.     }
  43.     return result;
  44. }
  45.  
  46.  
  47. void showSet(mySet myset) {
  48.     cout << " { " ;
  49.     for(auto a: myset) {
  50.         cout << a << " " ;
  51.     }
  52.     cout << " }" << endl;
  53. }
  54.  
  55. mySet getCase(int k) {
  56.     mySet mset;
  57.    
  58.     if ( k==1) {
  59.         mset = {1};
  60.     } else if (k==2 ) {
  61.         mset = {2,5,10};
  62.     } else if (k==3) {
  63.         mset = {3,4,6,9,11};
  64.     } else if (k==4) {
  65.         mset = {4,5,7,10,12,15,20};
  66.     }
  67.  
  68.     for (int i=1 ; (i<= k/2) && (k>4)  ; i++) {
  69.         mySet temp;
  70.        
  71.         temp = calcSet(getCase(i), getCase(k-i));
  72.         mset = mergeSet(mset,temp);
  73.     }
  74.     return mset;
  75. }
  76.  
  77.  
  78. bool IsCheck(int n, int k) {
  79.     mySet result;
  80.     result = getCase(k);
  81. //    showSet(result);
  82.    
  83.     return (result.find(n) != end(result));
  84. }
  85.  
  86. // n sheep, k stick
  87. string IsCheckRomanStyle(int n, int k) {
  88. //    cout << n << " " << k << " ";
  89.    
  90.     return (IsCheck(n,k))? "O" : "X";
  91. }
  92.  
  93. void GetDataFromFile(string filename) {
  94.     ifstream fin(filename);
  95.     string filenameOut = filename.replace(filename.length()-3, 3, ".out");
  96.     ofstream fout(filenameOut);
  97.    
  98.     if( !fin) {
  99.         cerr << "Cannot open the file" << endl;
  100.         return;
  101.     }
  102.    
  103.     int totalCase = 0;
  104.     fin >> totalCase; //cout << totalCase << endl
  105.    
  106.     while ( totalCase--) {
  107.         int n=0;
  108.         int k=0;
  109.         fin >> n >> k;
  110.        
  111. //        cout << IsCheckRomanStyle(n,k) << endl;
  112.         fout << IsCheckRomanStyle(n,k) << endl;
  113.     }
  114.     fout.close();
  115.     fin.close();
  116. }
  117.  
  118. int main(int argc, const char * argv[]) {
  119.  
  120. //        GetDataFromFile("Set1.in");
  121. //        GetDataFromFile("Set2.in");
  122. //        GetDataFromFile("Set3.in");
  123. //        GetDataFromFile("sample_03.in");
  124.    
  125.     GetDataFromFile(argv[1]);
  126.  
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement