Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- // Fl(l, k) = mod(k-1, l) + 1
- // F(n, k) = mod(Fl(n-1, k)+k-1, n)+1
- int findLth(int n, int k, int l) {
- if (n < l)
- return -1;
- int f = (k-1) % l + 1;
- for (int i=l+1; i<=n; i++)
- f = (f+k-1) % i + 1;
- if (n < k) {
- int i = 1;
- while (n*i < k)
- ++i;
- k -= n*(i-1);
- }
- f -= (k-1);
- if (f <= 0)
- f += n;
- return f;
- }
- int main(void) {
- int n; // total number
- int k; // k-th number
- // int l; // l-th-to-last number
- int t; // test case count
- std::cin >> t;
- while(t--) {
- std::cin >> n;
- std::cin >> k;
- // std::cin >> l;
- int last = findLth(n, k, 1);
- int second_to_last = findLth(n, k, 2);
- if (second_to_last < last)
- std::cout << second_to_last << " " << last << std::endl;
- else
- std::cout << last << " " << second_to_last << std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement