1
填空题,就是365米需要几个7,记得进1就好
#include <iostream>
using namespace std;
int main()
{
cout<<53;// 请在此输入您的代码
return 0;
}
2
字符串的基础运用,输入输出
#include <iostream>
using namespace std;
int main()
{
string s;
int n,x;
cin>>n;
cin>>s;
while(n--)
{
cin>>x;
cout<<s[x-1];
}
return 0;
}
3
这种字符串问题cf上也出过,既然都排序了,其实直接看每个字母出现的个数就好,如果两个数组之间不同的字符个数小于2就可以
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, l, x, sum;
int a[30];
string s1, s2;
cin >> n;
while (n--) {
memset(a,0,sizeof(a));
sum = 0;
cin >> s1 >> s2;
if(s1.size()!=s2.size()){cout << "NO" << endl;continue;}
l = s1.size();
for (int i = 0; i < l; i++) {
x = s1[i] - 'a';
a[x]++;
x = s2[i] - 'a';
a[x]--;
}
for (int i = 0; i < 30; i++)
sum += abs(a[i]);
if (sum <= 2)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
4
这个其实感觉是个模拟题类似,其实就是对每个仙女看他的两边p以内有没有其他人存在,然后因为坐标是乱序来的,所以可以先把坐标排了序以后再去直接顺序判断每个仙女左右有没有人就好
#include <bits/stdc++.h>
using namespace std;
struct qq {
int w, b;
} a[100005];
bool cmp(qq x, qq y) {
return x.w < y.w;
}
int main() {
int n, ans = 0;
cin>>n;
for (int i = 0; i < n; i++)
cin >> a[i].w;
for (int i = 0; i < n; i++)
cin >> a[i].b;
sort(a, a + n, cmp);
for (int i = 1; i < n - 1; i++) {
if (a[i - 1].w < a[i].w - a[i].b && a[i].w + a[i].b < a[i + 1].w)
ans++;
}
if (a[0].w + a[0].b < a[1].w)
ans++;
if (a[n - 1].w - a[n - 1].b > a[n - 2].w)
ans++;
cout << ans;
return 0;
}
5
这个题是一个图论的基础问题,其实是问一个点的相连的点有多少个其他点,就是从一个点走两步能到哪些点
但是直接写会tle掉因为两步还是有点多,我们就可以想先预处理一下,因为其实每个点有多少个点与之相连是可以预处理出来的,然后就可以一步出来了(但是注意把自己去掉)
#include <bits/stdc++.h>
using namespace std;
vector<int> a[200005];
int num[200005];
int main() {
int n, ans, x, y;
cin >> n;
for (int i = 1; i < n; i++) {
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
num[x]++, num[y]++;
}
for (int i = 1; i <= n; i++) {
ans = 0;
for (auto x : a[i]) {
ans += num[x] - 1;
}
cout << ans << ' ';
}
return 0;
}
6
这是个dp
先说这个递推公式,因为每个数的第一个数都可以从k到n里选一个,那么之后另一个数就可以从 n-k到0里面选另一个数进行加法运算,那么另一个数的可能情况之和, 就是n的情况之和,也就是 f[n]=f[n-k]+...+f[1]+f[0] 然后还能发现 f[n-1]=f[n-k-1]+...+f[1]+f[0] 所以就有 f[n]=f[n-k]+f[n-1] 这个式子。 在初始化时,如果小于k,那么依旧有1的可能(不约会),那么就dp最后就能写出来了
#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;
}