链接:link
来源:牛客网
A 模板
题目描述
用尽可能少的步数将一个字符串转化为另一个字符串,转化规则如下:
- 将其中任意一个字母替换为另一个
- 把最后一个字母删除
- 在尾部添加一个字母
求最少步数
输入描述
输入数据共33行,第一行包括两个整数 n , m ( 1 ≤ n , m ≤ 1 0 5 ) n,m(1 \leq n,m \leq 10^5) n,m(1≤n,m≤105)表示两个字符串的长度
第二行包含一个长度为 n n n的字符串 s 1 s_1 s1,表示第一个字符串。
第三行包含一个长度为 m m m的字符串 s 2 s_2 s2,表示第二个字符串。
思路
做题做多了可能会以为是一个字符串匹配的dp,但一看题目,只能在尾部做添加和删除操作,所以只要前面的修改,不够的添加,就是最少步数了
AC代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn 100005
using namespace std;
char word1[maxn],word2[maxn];
int ans;
int main(){
int n, m;
scanf("%d%d",&n,&m);
scanf("%s%s",word1,word2);
int mn=min(n,m);
int mx=max(n,m);
for(int i=0;i<mn;i++){
if(word1[i]!=word2[i])ans++;
}
ans+=mx-mn;
printf("%d",ans);
}
B 牛牛战队的比赛地
题目描述
由于牛牛战队经常要外出比赛,因此在全国各地建立了很多训练基地,每一个基地都有一个坐标 ( x , y ) (x,y) (x,y)。
这周末,牛牛队又要出去比赛了,各个比赛的赛点都在 x x x轴上。牛牛战队为了方便比赛,想找一个到达训练基地最大距离最小的地方作为比赛地。
输入描述
输入数据第一行包含一个整数 N ( 1 ≤ N ≤ 100000 ) N(1 \leq N \leq 100000) N(1≤N≤100000),表示牛牛战队训练基地的数量。
接下来 N N N行,每行包括 2 2 2个整数 x , y ( − 10000 ≤ x , y ≤ 10000 ) x,y(-10000 \leq x,y \leq 10000) x,y(−10000≤x,y≤10000),表示每一个训练基地的坐标。
思路
很容易想到二分答案,答案相当于半径,判断就是对每个点算出在这个半径下能够到达的x轴上的最左点和最右点,所有最右点的最小值大于所有最左点的最大值就表示可以
AC代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define maxn 100005
using namespace std;
struct Point{
double x,y;
}p[maxn];
double l,r;
int n;
int check(double x){
double resr,resl;
resr=100000.0,resl=-100000.0;
for(int i=1;i<=n;i++){
if(x<fabs(p[i].y))return 0;
double d=sqrt(x*x-p[i].y*p[i].y);
resl=max(resl,p[i].x-d);
resr=min(resr,p[i].x+d);
}
if(resr>=resl)return 1;
return 0;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
}
r=40000.0;
l=0.0;
while(r-l>1e-8){
double mid=(l+r)/2;
if(check(mid)==1)r=mid;
else l=mid;
}
printf("%lf",l);
}
C C语言IDE
题目描述
链接:link
来源:牛客网
输入
输入将给出一个在C99标准下可以正常编译运行的C语言代码,同时此份代码具有以下约束:
- 除引用头文件外,没有其他的编译预处理部分,如:#if,#ifdef,#ifndef,#else,#elif,#endif,#define,#undef,#error,#pragma,_Pragma,#line等。
- 所有的函数的参数与返回值内不会出现任何形式的数组类型,如:char a[]等,如果有指针,保证指针的一定紧跟在类型名后,如char*,long long*等。保证不会出现函数指针。
- 由单引号修饰的字符不可能是{,},(,),'或"。
- 由双引号修饰的字符串内一定不包含{,},(,),‘或",也不包含’/’,’/’,’//'的子串。
- 不会出现函数内嵌套函数的情况。
- 不会在/* /内出现/ */的嵌套结构。
- 不会把一句代码拆成两行写。
- main函数的返回值一定是int类型。当一个函数没有返回值时,一定有前置void标识。
- 程序内不会出现const标识符。
输入数据大小保证小于10KB。
输出
按照以下的格式一行输出一个代码中出现的函数,你可以以任意顺序输出各个函数,每个函数仅可被输出一次。
返回类型名(包括void) 函数名(参数1类型,…,参数n类型)
类型里如有空格,每处最多保留一个空格。
思路
大模拟?
WA代码
不清楚到底有几种变量名。我觉得这题出的让我很难受。没过就不放了
D 牛牛与牛妹的约会
牛牛在辛苦的一天的比赛之后,要去找牛妹玩,其实牛妹那天也在比赛。他为了找到牛妹,要尽快的从自己的比赛地到她的比赛地。还记得吗,比赛地都是只在 x x x轴上,所以两个人的坐标都满足 y = 0 y=0 y=0。牛牛除了可以以
1 1 1单位距离/单位时间的速度移动任意时间以外,还可以花费 1 1 1单位时间进行闪现。每次闪现时,如果当前他的坐标是 x = k x=k x=k。他将闪现到 x = x= x= k 3 \sqrt[3]{k} 3k
思路
开始我以为这题要算出 k − 1 = k 3 k-1=\sqrt[3]{k} k−1=