A.
题意:两个字符串 可以将其中一个字符串做以下操作 使两个字符串相等最小操作步数
任意一个字母替换为另一个
把最后一个字母删除
在尾部添加一个字母
思路:贪心就好 多余的直接删掉 不相同的再更改即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL ;
typedef pair<int,int> pii;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const double eps = 1e-7;
const double pi=acos(-1);
const int N = 2e5+5;
const int M = 2005;
const LL mod = 998244353;
int v1[205],v2[205];
int main()
{
int n,m;
cin >> n >> m;
string s,t;
cin >> s >> t;
int res = 0;
res += abs(n-m);
for(int i = 0; i < min(n,m);i ++)
{
if(s[i] != t[i])
res++;
}
cout << res << '\n';
return 0;
}
B.
待补
D.
题意:在x轴上的两个点 a,b 其中a有两种移动方式 1单位距离/单位时间的速度移动任意时间 和 花费1单位时间进行闪现到 当前坐标的立方根处
思路:贪心 每次选择最优的方法就是最优的答案
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL ;
typedef pair<int,int> pii;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const double eps = 1e-7;
const double pi=acos(-1);
const int N = 2e5+5;
const int M = 2005;
const LL mod = 998244353;
char s[15];
char t[15];
int main()
{
int T;
ios::sync_with_stdio(false);
cin >> T ;
while(T --)
{
double a,b;
cin >> a >> b;
double res = 0;
while(1)
{
double next = cbrt(a);///闪现的位置 cbrt为立方根函数
if(fabs(b-next) < fabs(b-a)-1) ///闪现的之后离b的距离和正常走离b的距离比较 闪现更接近b则使用闪现
res += 1.0,a = next;
else
{res += fabs(b-a);break;}///否则就正常走
}
printf("%.8f\n",res);
}
return 0;
}
E.
题意:
初始一共有n张卡牌
先手第一步最少要拿1张牌,最多要拿n−1张牌。
接下来每一步,双方最少要拿1张牌,最多拿等同于上一步对方拿的牌数的牌。
拿走最后一张牌的人将取得游戏的胜利。
思路:博弈 找规律 只要是2的幂次 就是Alice 否则是Bob 如果是2的幂次先手直接拿等同于其二进制最低位的数量的张数是必赢的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL ;
typedef pair<int,int> pii;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const double eps = 1e-7;
const double pi=acos(-1);
const int N = 2e5+5;
const int M = 2005;
const LL mod = 998244353;
int main()
{
LL n;
LL temp = 1;
cin >> n;
for(int i = 1;i <= 60;i ++)
{
if(temp == n)
{
cout << "Alice" << '\n';
return 0;
}
temp = temp * 2;
}
cout << "Bob" << '\n';
return 0;
}
H.https://ac.nowcoder.com/acm/contest/3006/H
思路:可以发现这个哈希函数是转26进制的 那么我们先把字符串转换成26进制的整数 后+mod转回26进制即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL ;
typedef pair<int,int> pii;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const double eps = 1e-7;
const double pi=acos(-1);
const int N = 2e5+5;
const int M = 2005;
const LL mod = 998244353;
char s[15];
char t[15];
int main()
{
int mod ;
while(~scanf("%s%d",s,&mod))
{
LL res = 0;
for(int i = 0;i < 6;i ++)
res = res*26 + s[i]-'a';
res += mod;
for(int i = 5;i >= 0;i --)
{
s[i] = res % 26 + 'a';
res /= 26;
}
if(res)
cout << "-1" << '\n';
else
cout << s << '\n';
}
return 0;
}
I.
题意:签到 判断是不是前三 并列也可以 或者 过题人数是否超过80%
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL ;
typedef pair<int,int> pii;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const double eps = 1e-7;
const double pi=acos(-1);
const int N = 2e5+5;
const int M = 2005;
const LL mod = 998244353;
int a[15];
int main()
{
int n,m;
cin >> n >> m;
for(int i = 1;i <= n ;i ++)
{
cin >> a[i];
}
int t = a[9];
int cnt = 0;
for(int i = 1;i <= n;i ++)
{
if(a[i] > t)
cnt++;
}
if(cnt <=2 || t >= m*0.8)
cout << "Yes" << '\n';
else
cout << "No" << '\n';
return 0;
}
J.
题意:圆内正n边形两个端点之间的最小距离
思路:
公式一套就好 注意逆时针走更好还是顺时针
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL ;
typedef pair<int,int> pii;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const double eps = 1e-6;
const double pi = acos(-1);
const int N = 1e5+5;
const int M = 2005;
const int mod = 1e9+7;
int main()
{
double n,r;
double i,j;
cin >> n >> r >> i >> j;
if(i > j)
swap(i,j);
double k = min(j-i,n-j+i);///有个细节 n-(j-i) = n-j+i
double res = 2*r*sin(pi/n)*k;
printf("%.8f\n",res);
return 0;
}