版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luyehao1/article/details/81907804
题目链接:
题意:
定义 (共有a个log),给定2个序列A,B,f(A)=,f(B)同理。求,若值为0,输出-1;若值为,输出1;否则,输出0 。
思路:
因为a,b<=3,所以我们对原式上下同求2次log,得:
先比较和这两项的大小,然后大的跟B中的大的比,小的跟B中的小的比即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAX = 1e5 + 10;
const int inf = 1e9 + 7;
int x[5],y[5];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int a,b;
scanf("%d%d",&a,&b);
for(int i=1;i<=a;i++){
scanf("%d",&x[i]);
}
for(int i=1;i<=b;i++){
scanf("%d",&y[i]);
}
int amax1,amax2,amax3,amax4;
if(a==1){
amax1=x[1]+2;
amax2=inf;
amax3=inf;
amax4=inf;
}
else if(a==2){
amax1=min(x[1]+2,x[2]+1);
amax2=inf;
amax3=max(x[1]+2,x[2]+1);
amax4=inf;
}
else{
if(x[1]+2<x[2]+1&&x[1]+2<x[3]){
amax1=x[1]+2;
amax2=inf;
amax3=min(x[2]+1,x[3]);
amax4=max(x[2]+1,x[3]);
}
else{
amax1=min(x[2]+1,x[3]);
amax2=max(x[2]+1,x[3]);
amax3=x[1]+2;
amax4=inf;
}
}
int bmax1,bmax2,bmax3,bmax4;
if(b==1){
bmax1=y[1]+2;
bmax2=inf;
bmax3=inf;
bmax4=inf;
}
else if(b==2){
bmax1=min(y[1]+2,y[2]+1);
bmax2=inf;
bmax3=max(y[1]+2,y[2]+1);
bmax4=inf;
}
else{
if(y[1]+2<y[2]+1&&y[1]+2<y[3]){
bmax1=y[1]+2;
bmax2=inf;
bmax3=min(y[2]+1,y[3]);
bmax4=max(y[2]+1,y[3]);
}
else{
bmax1=min(y[2]+1,y[3]);
bmax2=max(y[2]+1,y[3]);
bmax3=y[1]+2;
bmax4=inf;
}
}
if(amax1>bmax1){
printf("-1\n");
}
else if(amax1<bmax1){
printf("1\n");
}
else{
if(amax2>bmax2){
printf("-1\n");
}
else if(amax2<bmax2){
printf("1\n");
}
else{
if(amax3>bmax3){
printf("-1\n");
}
else if(amax3<bmax3){
printf("1\n");
}
else{
if(amax4>bmax4){
printf("-1\n");
}
else if(amax4<bmax4){
printf("1\n");
}
else{
printf("0\n");
}
}
}
}
}
return 0;
}