Codeforces Round #710 (Div. 3) Editorial 1506A

 题目链接 https://codeforces.com/contest/1506/problem/A

 原题

 1506A - Strange Table

 

Example
input
5
1 1 1
2 2 3
3 5 11
100 100 7312
1000000 1000000 1000000000000
output
1
2
9
1174
1000000000000

 

题解

先竖列竖列地排数字, 找到x所在的位置s1;

再横行横行地排, 找到s1位置的值并输出

  -----> 

(n为总行数, m为总列数, x为要找的数)

结果 = (行数-1)*m+第几列

求行: 要找到这个数的上一行, 这样用取余(x-1) % n, 比如

10, 我们要得到的是(行数-1) = 0

11, 我们要得到的是(行数-1) = 1

12, 我们要得到的是(行数-1) = 2

 求列: 用除法(x-1) / n+1, 看下上面的图应该就会了

代码

#include <iostream>

using namespace std;
typedef long long ll;
int main()
{
    int t;
    cin >> t;
    while(t --)
    {
        ll n ,m,x;
        scanf("%lld%lld%lld", &n, &m, &x);
       
        ll l = (x-1) / n+1;
        ll r = (x-1) % n;
        
        cout << r*m+l << endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/la-la-wanf/p/14582537.html