题意/题解
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;
}
反思: