- 何昱辰 的博客
7月day1
- @ 2025-7-15 19:08:38
T1.矩阵转置
题意:
给定一个行列的矩阵。中从上往下第行、从左往右第列的元素为。定义为一个行列的矩阵,其中从上往下第行从左往右第列的元素等于。也就是说,是的转置矩阵。请 输入 输出。
数据范围:
$1 ≤ H, W ≤ 10 ^ 5 \\ H \times W ≤ 10 ^ 5 \\ 1 ≤ A_{i, j} ≤ 10 ^ 9$
输入中的所有值均为整数
思路:
通过样例可得,其实就是把数组一列一列的输出,但是, ,而内存空间只能开 1古戈尔普勒克斯 的空间,所以只能用vector的二维数组或输入了和再定义int A[W][H]
代码:
#include <bits/stdc++.h>
using namespace std;
int w, h;//用大写不方便,所以我用的是小写
int main ()
{
cin >> h >> w;
int a[h + 10][w + 10] = {}, b[w + 10][h + 10] = {};//这里数组开大了一点,怕数组越界
//输入
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
cin >> a[i][j];
b[j][i] = a[i][j];
}
}
//输出
for (int i = 0; i < w; i++)
{
for (int j = 0; j < h; j++) cout << b[i][j] << ' ';
cout << "\n";
}
return 0;
}
T2.chess960
题意:
给定一个长度为的字符串,中恰好包含一个、一个、两个、和。判断是否满足以下条件:
-
假设从左数第个和第个字符是那么,和的奇偶性不同。
-
位于两个之间。更正式地说,假设中从左数第个和第个()字符是,第个字符是;那么。
思路:
根据题目所述判断就行。(就是代码有点长)
代码:
#include <bits/stdc++.h>
using namespace std;
string s;
int b = -1;
bool bs (int l, int r)
{
for (int i = l; i <= r; i++)
{
if (s[i] == 'R') return false;
}
return true;
}
int main ()
{
cin >> s;
for (int i = 0; i < 8; i++)
{
if (s[i] == 'B')
{
if (b == -1) b = i;
else
{
if ((b + i) % 2 == 0)
{
cout << "No";
return 0;
}
}
}
else if (s[i] == 'K')
{
if (i == 0 || i == 7)
{
cout << "No";
return 0;
}
else
{
bool tl = bs(0, i - 1), tr = bs(i + 1, 7);
if (tl || tr)
{
cout << "No";
return 0;
}
}
}
}
cout << "Yes";
return 0;
}
T3.我喜欢因式分解
题目:
给定一个整数,找出一对整数,使得保证对于给定的整数,存在这样的一对整数。
思路:
虽说,但是和的范围只有,两层循环嵌套直接秒了。
(真不知道自己是怎么回事,怎么这么简单都想不到······)
代码
#include <bits/stdc++.h>
using namespace std;
int x;
int main ()
{
cin >> x;
for (int a = -200; a <= 200; a++)
{
for (int b = -200; b <= 200; b++)
{
if (pow(a, 5) - pow(b, 5) == x)
{
cout << a << ' ' << b;
return 0;
}
}
}
return 0;
}