HUNNU新生赛第一场2022/10/20
地理题
https://ac.nowcoder.com/acm/contest/43597/A
第一篇题解给新生赛QWQ
A.https://ac.nowcoder.com/acm/contest/43597/A
思路:输出样例即可
代码:
using namespace std;
int main()
{
cout<<"ChangSha ZhuZhou XiangTan";
return 0;
}
B.https://ac.nowcoder.com/acm/contest/43597/B
思路:利用平方公式计算距离,并比较大小
代码
using namespace std;
int main()
{
int x1,x2,y1,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))<=100) cout<<"YES";
else cout<<"NO";
return 0;
}
C.https://ac.nowcoder.com/acm/contest/43597/C
思路:数据不超过100,直接枚举兔子的只数,有符合要求的情况记录并输出,遍历完毕无符合要求的情况则输出-1。此题也可以数学方法。
代码:
using namespace std;
int main()
{
int h,t;
scanf("%d%d",&h,&t);
bool ans=false;
for(int i=0;i<=h;i++)
{
if(2*i+(h-i)*4==t){
ans=true;
printf("%d %d",i,h-i);
}
}
if(!ans) printf("-1 -1");
return 0;
}
D.https://ac.nowcoder.com/acm/contest/43597/D
思路:列出n较小的情况易知(第一行第二行要交换) ,这是A在1-3次中可以作出选择的情况,那么n>4时,肯定尽量要达成让自己立场的本人胜或对方立场的对手胜,规律大家可以自行在草稿纸上寻找。
注意:不要忘记n=2的特判!(狠狠划掉)
注意:n=2的时候先手本人胜,是n=1是对手胜,学姐脑子糊掉惹!!!
代码:
using namespace std;
int main()
{
int n;
cin>>n;
if(n==2||(n%4==1)) printf("Alex");//狠狠划掉“n==2”
else printf("Bob");
return 0;
}
E.https://ac.nowcoder.com/acm/contest/43597/E
思路:令方程为y=kx+b,算出k。
(1)k不存在。即直线与y轴平行,直接比较x的值即可。
(2)k存在。通过k分别求出直线1,直线2,和过n的平行直线的b值,然后比较判断
代码:
using namespace std;
int main()
{
int x1,x2,x3,x4;
cin>>x1>>x2>>x3>>x4;
int y1,y2,y3,y4;
cin>>y1>>y2>>y3>>y4;
int n1,n2;
cin>>n1>>n2;
if(x3-x1!=0){
double k=(x4-x2)*1.0/(x3-x1);
double d1=1.0*x2-1.0*k*x1;
double d2=1.0*y2-1.0*k*y1;
double d3=1.0*n2-1.0*k*n1;
if(d2>d1)
{
if(d3>d2) printf("2");
else if(d3<d2&&d3>d1) printf("0");
else printf("1");
}
else if(d1>d2)//即k不存在
{
if(d3>d1) printf("1");
else if(d3<d1&&d3>d2) printf("0");
else printf("2");
}
}
else if(x3-x1==0){
if(x1<y1){
if(n1<x1) printf("1");
else if(n1>y1) printf("2");
else printf("0");
}
else if(x1>y1)
{
if(n1>x1) printf("1");
else if(n1<y1) printf("2");
else printf("0");
}
}
return 0;
}
** F**.https://ac.nowcoder.com/acm/contest/43597/F
思路:就是逻辑上的判断,具体看代码注释吧。情况比较繁琐。
代码:
using namespace std;
int a[10];
int b[10];
int main()
{
int n;
scanf("%d",&n);
int aa=0,bb=0;
bool j=true;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&a[i],&b[i]);
//分数均低于21,无赢家,违规比分
if(a[i]<21&&b[i]<21) j=false;
//比分均大于30时,违规比分
if(a[i]>30||b[i]>30) j=false;
//比分相等无赢家,违规比分
if(a[i]==b[i]) j=false;
//比分为21:20或20:21时,违规比分
if(a[i]==21&&b[i]==20) j=false;
if(b[i]==21&&a[i]==20) j=false;
//分数高者22~29 但赢分不是2,违规比分
if(a[i]>21&&a[i]>b[i]&&a[i]-b[i]!=2&&a[i]!=30) j=false;
if(b[i]>21&&b[i]>a[i]&&b[i]-a[i]!=2&&b[i]!=30) j=false;
//分数高者30,但输家不是28或29,违规比分
if(a[i]==30&&(a[i]-b[i]>2)) j=false;
if(b[i]==30&&(b[i]-a[i]>2)) j=false;
//已经赢了两局但是仍在比赛,违规
if(abs(aa-bb)==2) j=false;
//比分合规,比赛合规,记录对局得分情况
if(j){
if(a[i]>b[i]) aa++;
else bb++;
}
}
if(!j) printf("0");//数据不合规,输出零
else if(aa==1&&bb==1) printf("0");//1:1,无赢家,输出零
else printf("%d",aa>bb?1:2);
return 0;
}
写在最后,去年的萌新蒟蒻,今年的老蒟蒻,希望hanhan学姐的题解可以坚持到新生赛结束QWQ