【比赛】 AtCoder Beginner Contest 168

题意/题解

A ∴ (Therefore)

  • 题意:给你一个正整数,个位如果是 (3) 就输出bon,如果是 (0,1,6,8) 就输出pon 否则输出hon
  • 题解:判断就行。

B ... (Triple Dots)

  • 题意:给你一个字符串,如果字符串长度不超过 (k) 就输出整个串否则输出前 (k) 个字符和 (dots)
  • 题解:按题目说的做

C : (Colon)

  • 题意:有一个钟表时针长为 (a) 且每 (12) 小时转一圈,分针长为 (b) 且每小时转一圈。时针与分针一开始是重合的,问你 (h) 小时 (m) 分钟后这两根针所构成的三角形的长度未知的那条边的长。
  • 题解:可以算出最后的夹角,根据(sqrt{a^2+b^2-2abcos(x)}) 可以算,其中 (x) 为两针夹角。

D .. (Double Dots)

  • 题意:有一个洞穴,有 (n) 个房间和 (m) 条双向边,每条边连接着两个房间。问你在从每个房间出发最少经过最少房间到达 (1) 号房间时每个房间应该走向哪个房间。
  • 题解:应该是拓扑吧。

E ∙ (Bullet)

  • 题意:咕咕咕
  • 题解:咕咕咕

F . (Single Dot)

  • 题意:咕咕咕
  • 题解:咕咕咕

代码

A ∴ (Therefore)

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,x;

int main() {
	std::cin>>n;
	x=n%10;
	if(x==2||x==4||x==5||x==7||x==9) puts("hon");
	else if(x==0||x==1||x==6||x==8) puts("pon");
	else puts("bon");
	return 0;
}

B ... (Triple Dots)

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int k;
std::string sss;

int min(int a,int b) {return a<b?a:b;}

int main() {
	read(k);
	std::cin>>sss;int len=sss.length();
	for(int i=0;i<=min(k-1,len-1);++i) {
		printf("%c",sss[i]);
	}
	if(len>k) puts("...");
	return 0;
}

C : (Colon)

#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<iomanip>
#define pi 3.141592653589793238462643383279

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int a,b,h,m;
double w1=0.5,w2=6;

double min(double a,double b) {return a<b?a:b;}

double max(double a,double b) {return a>b?a:b;}

int main() {
	read(a),read(b),read(h),read(m);
	double jiao1=w1*(h*60.0+m*1.0),jiao2=w2*m*1.0;
	double jiajiao=max(jiao1,jiao2)-min(jiao1,jiao2);
	double hudu=jiajiao*pi/180.0;
	std::cout<<std::fixed<<std::setprecision(20)<<sqrt(a*a*1.0+b*b*1.0-2.0*a*1.0*b*1.0*cos(hudu));
	return 0;
}

D .. (Double Dots)

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<queue>
#define MAXN 200001
#define inf 1061109567

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,m,to[MAXN];
int cnt,head[MAXN];
int vis[MAXN],dis[MAXN];
struct Edge {
	int next,to;
}pth[MAXN<<2];
std::queue<int> q;

void add(int from,int to) {
	pth[++cnt].to=to,pth[cnt].next=head[from];
	head[from]=cnt;
}

int main() {
	memset(dis,0x3f,sizeof dis);
	read(n),read(m);
	for(int i=1,u,v;i<=m;++i) {
		read(u),read(v);
		add(u,v),add(v,u);
	}
	q.push(1);dis[1]=0;
	while(!q.empty()) {
		int u=q.front();q.pop();
		for(int i=head[u];i;i=pth[i].next) {
			int v=pth[i].to;
			if(dis[v]>dis[u]+1) {
				dis[v]=dis[u]+1;
				to[v]=u;
			}
			if(!vis[v]) {
				q.push(v);
				vis[v]=1;
			}
		}
	}
	for(int i=2;i<=n;++i) {
		if(dis[i]==inf) {
			puts("No");
			return 0;
		}
	}
	puts("Yes");
	for(int i=2;i<=n;++i) {
		printf("%d
",to[i]);
	}
	return 0;
}

反思:

  • 太菜了。
原文地址:https://www.cnblogs.com/poi-bolg-poi/p/12907121.html