CodeForces 384B Multitasking(大概是贪心)
2015-03-04 22:29
417 查看
Description
Iahub wants to enhance his multitasking abilities. In order to do this, he wants to sort n arrays simultaneously, each array consisting of m integers.
Iahub can choose a pair of distinct indices i and j(1 ≤ i, j ≤ m, i ≠ j). Then in each array the values at positions i and j are swapped only if the value at position i is strictly greater than the value at position j.
Iahub wants to find an array of pairs of distinct indices that, chosen in order, sort all of the n arrays in ascending or descending order (the particular order is given in input). The size of the array can be at most (at most pairs). Help Iahub, find any suitable array.
Input
The first line contains three integers n(1 ≤ n ≤ 1000), m(1 ≤ m ≤ 100) and k. Integer k is 0 if the arrays must be sorted in ascending order, and 1 if the arrays must be sorted in descending order. Each line i of the next n lines contains m integers separated by a space, representing the i-th array. For each element x of the array i, 1 ≤ x ≤ 106 holds.
Output
On the first line of the output print an integer p, the size of the array (p can be at most ). Each of the next p lines must contain two distinct integers i and j(1 ≤ i, j ≤ m, i ≠ j), representing the chosen indices.
If there are multiple correct answers, you can print any.
Sample Input
Input
2 5 0
1 3 2 5 4
1 4 3 2 5
Output
3
2 4
2 3
4 5
Input
3 2 1
1 2
2 3
3 4
Output
1
2 1
Hint
Consider the first sample. After the first operation, the arrays become [1, 3, 2, 5, 4] and [1, 2, 3, 4, 5]. After the second operation, the arrays become [1, 2, 3, 5, 4] and [1, 2, 3, 4, 5]. After the third operation they become [1, 2, 3, 4, 5] and [1, 2, 3, 4, 5].
题意:
输入n个长度为m的数组,当k = 0 时升序排列各个数组,k = 1时降序排列,排列操作只可通过交换数组两个元素间的值来完成,交换操作为对所有数组有效,但仅a[i] > a[j]时,才交换两个元素的值,求需要多少次交换可使所有数组元素顺序排列,最多交换m(m - 1)/2次,输出每次交换操作的i,j。
分析:
题意各种绕,英语是硬伤。
这题的hint并不是真正的hint,反而是一个很大的烟雾弹。
事实上,最多交换m(m - 1)/2次才是这题题眼所在。
我们知道m(m - 1)/2 = 1 + 2 + 3 + … + m,再联系那诡异的交换条件,这不就是冒泡排序么!
所以,不用while,不用if,直接输出冒泡排序过程就可以了//吐血三升
代码如下:
Iahub wants to enhance his multitasking abilities. In order to do this, he wants to sort n arrays simultaneously, each array consisting of m integers.
Iahub can choose a pair of distinct indices i and j(1 ≤ i, j ≤ m, i ≠ j). Then in each array the values at positions i and j are swapped only if the value at position i is strictly greater than the value at position j.
Iahub wants to find an array of pairs of distinct indices that, chosen in order, sort all of the n arrays in ascending or descending order (the particular order is given in input). The size of the array can be at most (at most pairs). Help Iahub, find any suitable array.
Input
The first line contains three integers n(1 ≤ n ≤ 1000), m(1 ≤ m ≤ 100) and k. Integer k is 0 if the arrays must be sorted in ascending order, and 1 if the arrays must be sorted in descending order. Each line i of the next n lines contains m integers separated by a space, representing the i-th array. For each element x of the array i, 1 ≤ x ≤ 106 holds.
Output
On the first line of the output print an integer p, the size of the array (p can be at most ). Each of the next p lines must contain two distinct integers i and j(1 ≤ i, j ≤ m, i ≠ j), representing the chosen indices.
If there are multiple correct answers, you can print any.
Sample Input
Input
2 5 0
1 3 2 5 4
1 4 3 2 5
Output
3
2 4
2 3
4 5
Input
3 2 1
1 2
2 3
3 4
Output
1
2 1
Hint
Consider the first sample. After the first operation, the arrays become [1, 3, 2, 5, 4] and [1, 2, 3, 4, 5]. After the second operation, the arrays become [1, 2, 3, 5, 4] and [1, 2, 3, 4, 5]. After the third operation they become [1, 2, 3, 4, 5] and [1, 2, 3, 4, 5].
题意:
输入n个长度为m的数组,当k = 0 时升序排列各个数组,k = 1时降序排列,排列操作只可通过交换数组两个元素间的值来完成,交换操作为对所有数组有效,但仅a[i] > a[j]时,才交换两个元素的值,求需要多少次交换可使所有数组元素顺序排列,最多交换m(m - 1)/2次,输出每次交换操作的i,j。
分析:
题意各种绕,英语是硬伤。
这题的hint并不是真正的hint,反而是一个很大的烟雾弹。
事实上,最多交换m(m - 1)/2次才是这题题眼所在。
我们知道m(m - 1)/2 = 1 + 2 + 3 + … + m,再联系那诡异的交换条件,这不就是冒泡排序么!
所以,不用while,不用if,直接输出冒泡排序过程就可以了//吐血三升
代码如下:
[code]/* *Author : Flint_x *Created Time : 2015-03-04 22:04:59 *File name : h1.cpp */ #include<iostream> #include<sstream> #include<fstream> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #include<cctype> #include<cmath> #include<ctime> #include<iomanip> using namespace std; const double eps(1e-8); typedef long long lint; int main(){ int n,m; lint x[1005][105]; bool flag; while(cin >> n){ cin >> m >> flag; for( int i = 1 ; i <= n ; i++ ){ for( int j = 1 ; j <= m ; j++ ){ cin >> x[i][j]; } } cout << m*(m - 1) / 2 << endl; for( int i = 1 ; i <= m ; i++ ){ for( int j = i + 1 ; j <= m ; j++ ){ if(flag) cout << j << " " << i << endl; else cout << i << " " << j << endl; } } } return 0; }
相关文章推荐
- Codeforces 509c Sums of Digits 贪心
- CodeForces 839B. Game of the Rows 贪心
- CodeForces 3A Shortest path of the king(贪心)——Codeforces Beta Round #3
- CodeForces #415(div2) Summer sell-off(贪心)
- 贪心-CodeForces 913C
- Codeforces 734B Anton and Digits【贪心】水题
- CodeForces 645E Intellectual Inquiry(构造+贪心+dp)
- CodeForces - 913C(贪心)
- CodeForces 916B Jamie and Binary Sequence (changed after round) (贪心)
- Codeforces 556D Case of Fugitive【排序+贪心】
- Codeforces 730 C Bulmart [bfs+贪心]
- CodeForces 339B (贪心模拟)
- CodeForces 589F -- F. Gourmet and Banquet (二分 + 贪心)
- CodeForces 487B RMQ贪心
- codeforces 3B (贪心)
- Codeforces 556A 贪心
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 828D) - 贪心
- codeforces 486-C. Palindrome Transformation(贪心)
- codeforces 798 D. Mike and distribution 二维贪心
- CodeForces 637 D.Running with Obstacles(贪心)