Codeforces Round 895 (Div. 3)(A,B,C)题解(自己VP的,没有参加这场比赛)
A. Two Vessels
题解: 这题直接计算两个杯子之间的差值,然后直接除以2倍杯子的容量直接过,没有任何难度
#include<bits/stdc++.h>
using namespace std;int t;
int a,b,c;int main()
{cin>>t;while(t--){cin>>a>>b>>c;int flag=abs(a-b);//计算差值int num=flag/(2*c);//计算次数if(flag%(2*c)!=0)num++;cout<<num<<"\n"; }return 0;
}
B. The Corridor or There and Back Again
题解:这题咋说嘞,用一个数,去统计每个有陷阱的房间最多允许我去的最右边的房间是多少,然后取其中最小的一个就是我们要求的结果,也是没啥难度
#include<bits/stdc++.h>
using namespace std;
int t;
int n;
int d;
int s;
int minn=0x3f3f3f3f;
int main()
{cin>>t;while(t--){minn=0x3f3f3f3f;cin>>n;for(int i=1;i<=n;i++){cin>>d>>s;if(s%2==0)minn=min(minn,s/2-1+d);else{minn=min(minn,s/2+d);}}cout<<minn<<"\n";}return 0;
}
C. Non-coprime Split
题解:这题要想做出来,需要知道一个知识点,求最大公约数除了欧几里得法(辗转相除法)还有一个就是更相减损术,gcd(a,b)=gcd(a-b,b)(前提是a>b)然后对于第二个公式来讲,那么就是a+b=第一个公式的a,然后就有做这题的眉目了,我们可以将要从左区间开找,找到一个因子即可返回i-因子和因子的值
#include<bits/stdc++.h>
using namespace std;
int t;
int l,r;
int main()
{cin>>t;while(t--){cin>>l>>r;int flag=0;for(int i=max(l,4);i<=r;i++){for(int j=2;j<=i/j;j++){if(i%j==0){flag=1;printf("%d %d\n",i-j,j);break;}}if(flag==1){break;}} if(flag==0)printf("-1\n");}return 0;
}