包你拿到双修者(限一位)
2026-09-19 14:04:43
发布于:广东
#include <unistd.h>
static char inBuf[1 << 10];
static int inLen = 0, inPos = 0;
inline int readChar() {
if (inPos == inLen) {
inLen = read(0, inBuf, sizeof(inBuf));
inPos = 0;
if (inLen <= 0) return -1;
}
return inBuf[inPos++];
}
inline int readInt() {
int c = readChar();
while (c <= ' ') { if (c == -1) return 0; c = readChar(); }
int x = 0;
while (c > ' ') { x = (x << 3) + (x << 1) + (c - '0'); c = readChar(); }
return x;
}
static char outBuf[1 << 10];
static int outLen = 0;
inline void flushOut() {
if (outLen > 0) { write(1, outBuf, outLen); outLen = 0; }
}
inline void outChar(char c) {
if (outLen == (int)sizeof(outBuf)) flushOut();
outBuf[outLen++] = c;
}
inline void outInt(int v) {
if (v == 0) { outChar('0'); return; }
char tmp[12]; int tl = 0;
while (v) { tmp[tl++] = '0' + v % 10; v /= 10; }
while (tl) outChar(tmp[--tl]);
}
static int a[15][15];
int main() {
int n = readInt();
int m = readInt();
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
a[i][j] = readInt();
// 每行排序(插入排序,m<=10)
for (int i = 0; i < n; i++) {
for (int j = 1; j < m; j++) {
int key = a[i][j];
int k = j - 1;
while (k >= 0 && a[i][k] > key) {
a[i][k+1] = a[i][k];
k--;
}
a[i][k+1] = key;
}
}
// 每列排序(插入排序,n<=10)
for (int j = 0; j < m; j++) {
for (int i = 1; i < n; i++) {
int key = a[i][j];
int k = i - 1;
while (k >= 0 && a[k][j] > key) {
a[k+1][j] = a[k][j];
k--;
}
a[k+1][j] = key;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (j) outChar(' ');
outInt(a[i][j]);
}
outChar('\n');
}
flushOut();
return 0;
}
全部评论 3
hello
昨天 来自 广东
2hi
10小时前 来自 广东
1
我没提交,所以你看不到我的提交记录,不过这要你是的一个看到我这篇并用的,是肯定能拿到双修者的
昨天 来自 广东
1没人用,只好我自己搞了
执行用时:0ms
内存消耗:1.39MB
击败了100.00%的用户
击败了100.00%的用户10小时前 来自 广东
0








有帮助,赞一个