做完这次比赛,必须要写题解。真的是心态崩了。。第一个水题,一直wa。。。原来没有用gets,cin无法接收空格...记住这个教训吧!!!
A LL
链接:https://www.nowcoder.com/acm/contest/96/A
来源:牛客网
输入有多组(组数不超过100),每组输入一行字符串(字符串长度不超过100)。
输出占一行,如果输入符合要求则输出yes,否则输出no。
longlong LoveLive love live
no yes no
注意,字符串里面有空格,就不能用cin了。。。还有就是长度大于8时也要考虑
代码:
#include
#define ll long long
using namespace std;
int main()
{
char s[109];
while(gets(s))
{
bool flag=1;
int len=strlen(s);
if(len!=8) flag=0;
if(s[0]!='L'&&s[0]!='l')flag=0;
if(s[1]!='O'&&s[1]!='o')flag=0;
if(s[2]!='V'&&s[2]!='v')flag=0;
if(s[3]!='E'&&s[3]!='e')flag=0;
if(s[4]!='L'&&s[4]!='l')flag=0;
if(s[5]!='I'&&s[5]!='i')flag=0;
if(s[6]!='V'&&s[6]!='v')flag=0;
if(s[7]!='E'&&s[7]!='e')flag=0;
if(flag)
cout<<"yes"<
B 奇怪的加法
链接:https://www.nowcoder.com/acm/contest/96/B
来源:牛客网
输入有多组(组数不超过1000),每组占一行,每行有2个正整数A和B。(A,B<=1e9)
每组输出占一行,输出题目中A和B相加的结果。
123 321 999 1 99 11
444 990 0
思路:
注意一个小技巧,可以先转换成数字,在进行相加。注意相加的时候是从后面往前面加。
代码:
#include
using namespace std;
int main()
{
int a[100],b[100];
char s[100],ss[100];
while(cin>>s>>ss)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int l1=strlen(s);
int l2=strlen(ss);
int ll=max(l1,l2);
for(int i=0;i
C - 取手机
链接:https://www.nowcoder.com/acm/contest/96/C
来源:牛客网
第一行一个正整数T,表示数据组数。(1<=T<=10000) 接下来T行输入a,b,k 其中(1<=a,b,k<=1e9) k<=a+b;
第k次拿出s8的概率,保留三位小数
1 1 1 1
0.500
思路:
概率题目,注意找几个案例,可以发先b/(a+b)即为结果
代码:
#include
using namespace std;
char mp[500][500];
int main()
{
int t;
cin>>t;
while(t--)
{
double a,b,k;
cin>>a>>b>>k;
double c=b/(a+b);
printf("%.3lf\n",c);
}
return 0;
}
E 小木乃伊到我家
链接:https://www.nowcoder.com/acm/contest/96/E
来源:牛客网
第一行输入两个整数n和m(2<=n<=m<=200000),分别表示有n座城市和m条路,城市编号为1~n(快递姐姐所在城市为1,AA所在城市为n)。 接下来m行,每行输入3个整数u,v,w(u,v<=n,w<=100000),分别表示城市u和城市v之间有一条长为w的路。
输出结果占一行,输出快递姐姐到达AA家最短需要走多远的路,如果没有路能走到AA家,则输出“qwb baka”(不用输出双引号)。
4 4 1 2 1 2 3 2 3 4 3 2 3 1
5
思路:最短路模板,spfa算法
代码:
#include
#define maxn 210000
#define INF 1e9
using namespace std;
struct Edge{
int from,to,dist;
Edge(int f,int t,int d):from(f),to(t),dist(d){};
};
struct BellmanFord{
int n,m; ///n点m条边
vector edges;
vector G[maxn];
bool inq[maxn];
int d[maxn];///s到各点的距离
int p[maxn];///最短路中的上一条弧
int cnt[maxn];///进队次数
void init(int n)
{
this->n=n;
for(int i=1;i<=n;i++) G[i].clear(); //1开始
edges.clear();
}
void AddEdge(int from,int to,int dist)
{
edges.push_back(Edge(from,to,dist));
m=edges.size();
G[from].push_back(m-1);
}
void spfa(int s)
{
queue Q;
memset(inq,0,sizeof(inq));
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;i++) d[i]= i ==s?0:INF; //1开始
Q.push(s);
while(!Q.empty())
{
int u=Q.front();
Q.pop();
inq[u] = false;
for(int i=0;i<(int ) G[u].size();i++ )
{
Edge &e = edges[G[u][i]];
if(d[e.to] > d[u] +e.dist )
{
d[e.to] = d[u]+e.dist;
p[e.to] = G[u][i];
if(!inq[e.to])
{
Q.push(e.to);
inq[e.to] = true;
}
}
}
}
}
}BF;
int main()
{
int n,m;
cin>>n>>m;
BF.init(n);
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
BF.AddEdge(u,v,w);
BF.AddEdge(v,u,w);
}
BF.spfa(1);
if(BF.d[n]==INF)
{
cout<<"qwb baka"<
-------------------------------------!未完待续--------------------------------------