Advertisement
Guest User

Untitled

a guest
Jul 1st, 2015
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. // Fl(l, k) = mod(k-1, l) + 1
  4. // F(n, k) = mod(Fl(n-1, k)+k-1, n)+1
  5.  
  6. int findLth(int n, int k, int l) {
  7. if (n < l)
  8. return -1;
  9.  
  10. int f = (k-1) % l + 1;
  11. for (int i=l+1; i<=n; i++)
  12. f = (f+k-1) % i + 1;
  13.  
  14. if (n < k) {
  15. int i = 1;
  16. while (n*i < k)
  17. ++i;
  18. k -= n*(i-1);
  19. }
  20.  
  21. f -= (k-1);
  22. if (f <= 0)
  23. f += n;
  24.  
  25. return f;
  26. }
  27.  
  28. int main(void) {
  29. int n; // total number
  30. int k; // k-th number
  31. // int l; // l-th-to-last number
  32. int t; // test case count
  33.  
  34. std::cin >> t;
  35.  
  36. while(t--) {
  37.  
  38. std::cin >> n;
  39. std::cin >> k;
  40. // std::cin >> l;
  41.  
  42. int last = findLth(n, k, 1);
  43. int second_to_last = findLth(n, k, 2);
  44.  
  45. if (second_to_last < last)
  46. std::cout << second_to_last << " " << last << std::endl;
  47. else
  48. std::cout << last << " " << second_to_last << std::endl;
  49. }
  50.  
  51. return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement