- 郭妍溪 的博客
7月DAY1
- @ 2025-7-15 20:19:29
(学霸勿看,看了别笑话)
A.矩阵转置
题意:纵向打印原矩阵。 思路:纵向遍历原矩阵,并输出。 错因:数据开小了。 代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,m;
cin>>n>>m;
long long a[n][m];
for(long long i=0;i<n;i++)
{
for(long long j=0;j<m;j++)
{
cin>>a[i][j];
}
}
for(long long j=0;j<m;j++)
{
for(long long i=0;i<n;i++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
B.chess960
题意:一个长度为8的字符串,其中包含一个K一个Q两个R两个B两个N,两个B下标奇偶不同,K在两个R之间。 思路:先统计数量并判断,再判断其他条件。 (一遍过) 代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int n,m,x,y,z,a1=0,a2=0,a3=0,a4=0,a5=0;
cin>>s;
for(int i=0;i<8;i++)
{
if(s[i]=='B'&&a4==0)
{
a4++;
n=i;
}
else if(s[i]=='B')
{
a4++;
m=i;
}
else if(s[i]=='R'&&a3==0)
{
a3++;
x=i;
}
else if(s[i]=='R')
{
a3++;
y=i;
}
else if(s[i]=='K')
{
a1++;
z=i;
}
else if(s[i]=='Q')
{
a2++;
}
else
{
a5++;
}
}
if(a1!=1||a2!=1||a3!=2||a4!=2||a5!=2)
{
cout<<"No";
return 0;
}
if(n%2==m%2)
{
cout<<"No";
return 0;
}
if(z<x||z>y)
{
cout<<"No";
return 0;
}
cout<<"Yes";
return 0;
}
C.暑假打工
题意:在不超过M的天数中,可获得的最大报酬(一天仅可完成一个,不可以重复)。 思路:运用贪心算法。 错因:没优化代码,超时了。 代码:
#include <bits/stdc++.h>
using namespace std;
priority_queue<int> q1;
priority_queue<int, vector<int>, greater<int>> q2;
vector<pair<int,int>> jobs;
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int ai, bi; cin >> ai >> bi;
jobs.push_back({ai, bi});
}
sort(jobs.begin(), jobs.end());
int idx = 0, ans = 0;
for (int day = 1; day <= m; day++)
{
while (idx < n && jobs[idx].first <= day)
{
q1.push(jobs[idx].second);
idx++;
}
if (q1.size() != 0)
{
ans += q1.top();
q1.pop();
}
}
cout << ans << endl;
return 0;
}
D.我喜欢因式分解
题意:找出一组数,满足第一个数的5次方减第二个数的5次方等于原数。 思路:运用暴力枚举法(先确定范围) 错因:没找到范围,没写。 代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long x;
cin>>x;
for(long long i=-200;i<200;i++)
{
for(long long j=-200;j<200;j++)
{
if(i*i*i*i*i-j*j*j*j*j==x)
{
cout<<i<<" "<<j;
return 0;
}
}
}
return 0;
}
总结: 写之前还是应该看清范围,尽量细心,避免出错。(会的也没几个)