自己记录一下。
1. 喜鹊罢工
这个题很简单。
代码:
#include <iostream>
using namespace std;
int main()
{
cout<<365/7+1;
return 0;
}
2. 牛郎取名
这个题也很简单。
代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 请在此输入您的代码
int n;
cin>>n;
string s;
cin>>s;
while (n--)
{
int p;
cin>>p;
cout<<s[p-1];
}
return 0;
}
3. 织女的考验
这个题就是把输入的26个字母各有多少都记录在数组中,然后最后两个数组的字母频率的差值于若大于2,则输出NO,即可。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
// 请在此输入您的代码
int t;
cin>>t;
while(t--)
{
string s,t;
cin>>s>>t;
int sc[26]={0};
int tc[26]={0};
for (char c:s) sc[c-'a']++;
for (char c:t) tc[c-'a']++;
string flag="YES";
int freq=0;
for (int i=0;i<26;i++)
{
if(sc[i]!=tc[i]) freq+=abs(sc[i]-tc[i]);
}
if (freq>2) flag="NO";
cout <<flag<<endl;;
}
return 0;
}
4. 仙男仙女
这个题刚开始看的时候就没注意到原始数据没有排序过的,所以一直不知道哪里出现了问题。
当把数据就排序过,就没问题了。
代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
// 请在此输入您的代码
int n; cin>>n;
vector<pair<int,int>> p(n);
int a;
for(int i=0;i<n;i++)
{
cin>>p[i].first;
}
int sum=0;
for(int i=0;i<n;i++)
{
cin>>p[i].second;
}
sort(p.begin(),p.end());
for(int i=0;i<n;i++)
{
if(i!=0 && i!=n-1) if(p[i].first-p[i].second >p[i-1].first && p[i].first+p[i].second <p[i+1].first) sum++;
if( i== 0) if(p[i].first+p[i].second <p[i+1].first) sum++;
if( i== n-1) if(p[i].first-p[i].second >p[i-1].first) sum++;
}
cout<<sum;
return 0;
}
5. 牛郎的微信群
这个题运用了邻接表,几乎没有做过这样的算法练习,盲区吧,心里也有一种害怕,不知道怎么入手。
这里先附上别人的代码,之后复盘到这块的时候,在做一下。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 10;
vector<int> e[N];
void solve() {
int n;
cin >> n;
for(int i = 1 , u , v ; i < n ; i++) {
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
vector<int> v(n + 1);
for(int i = 1 ; i <= n ; i++) {
int x = 0;
for(auto& k : e[i]) {
x += (e[k].size() - 1);
}
v[i] = x;
}
for(int i = 1 ; i <= n ; i++) cout << v[i] << " ";
cout << endl;
}
signed main()
{
int t = 1;
//cin >> t;
while(t--) solve();
return 0;
}
6. 久别重逢
这个题找递推公式,比较难。(我现在都还是有点困惑,)
#include <iostream>
using namespace std;
const int mod = 1e9 + 7;
const int N = 2e5 + 5;
typedef long long ll;
ll a[N];
int main() {
int T, x, y, k, n;
cin >> n >> k;
for(int i=0;i<k;i++)a[i]=1;
for (int i = k; i <= n; i++)
a[i] = (a[i - 1] + a[i-k])%mod;
cout << a[n];
return 0;
}
这六个题目,1,2,非常简单。3,4,需要转换一下,5,6,有一些难度。
同时,最主要还是发现了自己的很大的不足,哪些地方需要进一步学习和练习,更加清楚了一点。