A:
题意:
黑板上写上1~n的数字,第i次操作删掉第i个数(在剩余里数删),保证剩下的数的个数>=i,否则终止,问第x个数为多少?
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d\n",n*2);
}
return 0;
}
B:
题意:
给出一个图,让你把 ’ . ’ 补成 ’ * ’ ,找出你需要补出的最少的数量使其可以成为‘十’字,这里的十字定义是满行+满列;
代码:
#include <iostream>
#include <string>
#include <algorithm>
typedef long long ll;
using namespace std;
string s[50005];
int main() {
int t;
cin >> t;
while (t--) {
int n, m; cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> s[i];
}
int l[50005], r[50005];
memset(r, 0, sizeof(r));
memset(l, 0, sizeof(l));
for (int i = 0; i<n; i++)
for (int j = 0; j < m; j++) {
if (s[i][j] == '.') {
l[j]++;
r[i]++;
}
}
int ans = 4000005;
for (int i = 0; i<n; i++)
for (int j = 0; j < m; j++) {
ans = min(ans, r[i] + l[j] - (s[i][j] == '.'));
}
cout << ans << endl;
}
}
C:
题意:
给你3个字符串s,t, p, 询问是否可以从p中取出一些字符插入到字符串s的任意位置,使其等于t ?
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<set>
#include<map>
using namespace std;
const int maxn = 10005;
string s, t, p;
map<char, int>q;
bool check(string s, string t) //判断s是否是t的子串
{
int j = 0;
for (int i = 0; i < t.length(); i++)
{
for (j; j < s.length(); j++)
{
if (t[i] == s[j])
{
j++;
break;
}
else
{
break;
}
}
}
if (j == s.length())
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int t1;
scanf("%d", &t1);
while (t1--)
{
cin >> s >> t >> p;
bool flag = false;
if (check(s, t))
{
q.clear();
for (int i = 0; i < t.length(); i++)
{
q[t[i]]++;
}
for (int i = 0; i < s.length(); i++)
{
q[s[i]]--;
}
for (int i = 0; i < p.length(); i++)
{
if (q[p[i]] > 0) {
q[p[i]]--;
}
}
for (int i = 0; i < t.length(); i++)
{
if (q[t[i]] > 0)
{
flag = true;
break;
}
}
}
else
{
flag = true;
}
if (flag == true)
{
printf("NO\n");
}
else {
printf("YES\n");
}
}
}
D(博弈问题。需sg函数打表找规律):
题意:
当前在n位置,每一次可以向左走1,2,或者k步,最左的位置是0,不能走到0的左边, 二人博弈问题,谁没法再走的时候就输掉,问先手必赢还是后手必赢。
代码:
https://blog.csdn.net/qq_40791842/article/details/96154081