题意/题解
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\n",to[i]);
}
return 0;
}
反思: