刷题总结——ball(ssoj)

题目:

题目背景

SOURCE:NOIP2015-SHY-9

题目描述

Alice 与 Bob 在玩游戏。他们一共玩了 t 轮游戏。游戏中,他们分别获得了 n 个和 m 个小球。每个球上有一个分数。每个人的得分都为他所获得所有小球分数的乘积,分数小者获胜。问每轮游戏谁会获胜?请输出每轮游戏的胜者。数据保证不会出现平局,且两个人分数差异大于任意一个人分数的 1% 。

输入格式

第一行为两人玩的轮数 t(1≤t≤10)。
每一轮游戏的输入中:
第一行一个整数 n,代表 Alice 获得球的个数。
第二行为 n 个整数 ai,代表 Alice 每个球的分数。
第三行一个整数 m,代表 Bob 获得球的个数。
第四行为 m 个整数 bi,代表 Bob 每个球的分数。

输出格式

输出共 t 行,每行为该轮胜者的名字“Alice”或“Bob”。

样例数据 1

输入  [复制]

 

 



2 3 4 

1 3 4 5

输出

Alice

备注

【样例说明】
Alice:2 * 3 * 4 = 24
Bob: 1 * 3 * 4 * 5 = 60

【数据范围】
对于 40% 的数据:n,m,ai,bi≤10;
对于 100% 的数据:1≤n,m≤100000;-10000≤ai,bi≤10000。

题解:

由于乘积过大容易想到把乘积转换为加减形式····所以联想到了对每一个乘数取log然后相加比较··

注意判断负数和0的情况

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
inline int R()
{
  char c;int f=0,i=1;
  for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar());
  if(c=='-')  c=getchar(),i=-1;
  for(;c<='9'&&c>='0';c=getchar())  f=(f<<3)+(f<<1)+c-'0';
  return f*i;
}
int T,n,m,cnt1,cnt2;
double tot1,tot2;
inline double Abs(int a)
{
  double t=a;
  return t<0?-t:t;
}
int main()
{
  //freopen("a.in","r",stdin);
  T=R();double a;  
  while(T--)
  {
    bool flag1=false,flag2=false;
    tot1=tot2=0;
    n=R();cnt1=0;
    for(int i=1;i<=n;i++)
    {  
      a=R();if(a<0) cnt1++;
      else if(a==0) flag1=true;
      tot1+=log(Abs(a));
    }
    m=R();cnt2=0;
    for(int i=1;i<=m;i++)
    {
      a=R();if(a<0) cnt2++; 
      else if(a==0) flag2=true;
      tot2+=log(Abs(a));
    }
    if(flag1==true&&cnt2%2==0)  cout<<"Alice"<<endl;
    else if(flag1==true&&cnt2%2==1)  cout<<"Bob"<<endl;
    else if(flag2==true&&cnt1%2==0)  cout<<"Bob"<<endl;
    else if(flag2==true&&cnt1%2==1)  cout<<"Alice"<<endl;
    else if(cnt1%2==1&&cnt2%2==0)  cout<<"Alice"<<endl;
    else if(cnt1%2==0&&cnt2%2==1)  cout<<"Bob"<<endl;
    else if(cnt1%2==0&&cnt2%2==0)
    {
      if(tot1<tot2)  cout<<"Alice"<<endl;
      else cout<<"Bob"<<endl;
    }
    else if(cnt1%2==1&&cnt2%2==1)
    {
      if(tot1<tot2)  cout<<"Bob"<<endl;
      else cout<<"Alice"<<endl;
    }
  }
  return 0;
}

 

转载于:https://www.cnblogs.com/AseanA/p/7638208.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Postman是一款常用的API开发和测试工具,可以用于发送HTTP请求并查看响应结果。在Postman中,可以通过Authorization界面来设置请求的认证方式。 以下是使用Postman的Authorization界面进行认证的步骤: 1. 打开Postman应用程序,并创建一个新的请求。 2. 在请求的URL栏中输入需要发送请求的URL地址。 3. 点击右侧的"Authorization"选项卡,进入认证设置界面。 4. 在认证设置界面中,选择合适的认证类型。根据提供的引用内容,可以选择"OAuth 2.0"认证类型。 5. 在"OAuth 2.0"认证类型下,填写相应的认证参数。根据提供的引用内容,需要填写"Authorization URL"和"Access Token URL"。 - 在"Authorization URL"中,填写引用中提供的URL地址:http://localhost:8090/auth/oauth/authorize?client_id=ssoj-pc&response_type=token - 在"Access Token URL"中,填写引用中提供的URL地址:http://localhost:8080/oauth/token?code=6s9qUj&grant_type=authorization_code&redirect_uri=http://www.mayikt.com/callback&scope=all 6. 根据需要,填写其他相关的认证参数,例如"Client ID"、"Client Secret"等。 7. 点击"Get New Access Token"按钮,开始进行认证流程。 8. 根据认证流程的要求,可能需要输入用户名和密码等信息。 9. 完成认证流程后,会在界面上显示获取到的Access Token信息。 10. 点击"Use Token"按钮,将Access Token添加到请求的Header中。 11. 完成认证设置后,可以点击"Send"按钮发送请求,并查看响应结果。 请注意,以上步骤仅为示例,实际使用时需要根据具体的认证方式和参数进行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值