KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)

KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)

导读:
简单的题目,只说明题意,或者直接说明结论
下面的难题,会做详细的解释和证明

A - Century

按照题意模拟

void work()
{
  int n;
  cin >> n;
  cout << (n + 99) / 100 << endl;
}

B - 200th ABC-200

按照题意模拟

void work()
{
  LL n, k; cin >> n >> k;
  while (k -- )
  {
    if (n % 200 == 0) n /= 200;
    else n = n * 1000 + 200;
  }
  cout << n << endl;
}

C - Ringo’s Favorite Numbers 2

给一个长度为n的数组,询问有多少个数对满足ai - aj == 200的倍数
我们可以先排个序,然后,记录模200的的值出现的次数,累加起来即可。

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i ++ )
#define ll long long
const int N = 200010;
int n;
map<int, int> mp, mmp;
int a[N];
int main(void)
{
  cin >> n;
  rep(i, n) scanf("%d", &a[i]);
  sort(a, a + n);
  ll ans = 0;
  rep(i, n)
  {
    // int t = mp[a[i] % 200] - mmp[a[i]];
    int t = mp[a[i] % 200];
    ans += t;
    // printf("t = %d, a[i] = %d, mp = %d, mmp = %d\n", t, a[i], mp[a[i] % 200], mmp[a[i]]);
    mp[a[i] % 200] ++;
    // mmp[a[i]] ++;
  }
  cout << ans << endl;
  return 0;
}

D - Happy Birthday! 2

题意:给定一个长度为n的数组,对应可以组成2 ^ n - 1个集合,问这里面是否存在两个集合的元素的和可以让他们对200取模的集合相等

做法:这里的n只有200大,而且我们的集合是对200取的模,那么,取模后的结果最多也只有200个,显然,当n大于等于8的时候,一定可以合法,毕竟2 ^ 8 = 256,由鸽巢原理,(有n+1个鸽子,n个笼子,现在将所有鸽子放到笼子里,一定存在一个笼子至少有两只鸽子),我们可以很显然的理解结论为何成立。
那么,我们就可以对n取值为min(n, 8)。然后,我们可以通过二进制来枚举一下集合的选取发方案,1代表选0代表必选,下面是代码。

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i ++ )
const int N = 210;
int n;
int a[N];
pair<int, int> s[N];
int main()
{
  cin >> n;
  rep(i, n) scanf("%d", &a[i]), a[i] %= 200;
  n = min(n, 8);
  rep(i, 1 << n)
  {
    int sum = 0, cnt = 0;
    rep(j, n)
    {
      if (i >> j & 1) sum += a[j], cnt ++;
    }
    sum %= 200;
    if (s[sum].first)
    {
      cout << "Yes" << "\n";
      cout << s[sum].first << " ";
      rep(j, n)
        if (s[sum].second >> j & 1) cout << j + 1<< " ";
      cout << endl;
      cout << cnt << " ";
      rep(j, n)
        if (i >> j & 1) cout << j + 1 << " ";
      cout << endl;
      return 0;
    }
    s[sum] = {cnt, i};
  }
  cout << "No" << "\n";
  return 0;
}

E - Patisserie ABC 2

题意:一个三元组,(beauty,taste,popular),每个元素大小都在1到n之间,这样我们可以得到3^n个元组,现在按照总和为第一关键字,beauty为第二关键字,taste为第三关键字,按照从小到大的顺序排序,问你第k个元组是多少?

分析:
首先,令x为beauty,taste和popular的和,并且x是从3到3 * n中间的一个数字。我们现在来看一下当x = k的时候,有什么性质。
x反应了我们从{1,2, …, n}集合中抽了三次且所得的和为k
用dp来求解,dp[i][j]的集合意义为已经选择了i个数(i从0到3),选择的这i个数字的和为j,满足这种选择的方案数为多少。
我们可以看到,dp[i][j]dp[i+1][j+1], dp[i+1][j+2], dp[i+1][j+3], ... , dp[i+1][j+n]的一部分。拿dp[1][j}dp[2][j + 5]来说,就是只选了一个数,当前总和为j(选的只是j),是选了2个数,且总和是j + 5(也就是第二次选择是5)的一种方案数。
当我们求完dp后,我们可以用我们题目中的k(第k个数)不断的减去dp[3][j],直到我们找到位于第k个数范围的x,然后,枚举beauty,然后可以求taste和popular了。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 3000005;
int main()
{
  int n;
  ll k;
  ll dp[4][N] = {0};
  cin >> n >> k;
  dp[0][0] = 1;
  for (int i = 0; i < 3; i ++ ) 
  {
    for (int j = 0; j <= i * n; j ++ ) 
    {
      //只在1~n之间加上
      dp[i + 1][j + 1] += dp[i][j];
      dp[i + 1][j + n + 1] -= dp[i][j];      
    }
    for (int j = 1; j <= (i + 1) * n; j ++ )
      dp[i + 1][j] += dp[i + 1][j - 1];
  }
  int x;
  for (int i = 3; i <= 3 * n; i ++ )
    if (k <= dp[3][i]) {x = i; break;}
    else k -= dp[3][i];
  for (int i = 1; i <= n; i ++ )
  {
    //现在i是确定的,那么j和k就只会在l到r这个区间变换
    //而且,变化的个数也就是r-1+1个
    int l = max(1, x - n - i);
    int r = min(n, x - i - 1);
    if (l > r) continue;
    if (k > r - l + 1) {k -= r - l + 1; continue;}
    int y = l + k - 1;
    int z = x - i - y;
    cout << i << " " << y << " " << z << endl; 
    return 0;
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kyocera Client Tool 是一个用于管理 Kyocera 打印机和复印机的软件。要安装它,您需要先下载安装文件,然后双击文件运行安装程序。根据您使用的操作系统,安装过程可能会略有不同。在安装过程中,您可能需要输入序列号或许可证密钥。安装完成后,您可以使用该工具来管理您的打印机和复印机。 ### 回答2: Kyocera Client Tool(客户端工具)是一款用于访问和配置Kyocera复印机/打印机的工具。它可以帮助用户管理打印机,以便更好地满足他们的需求。这个工具包括了许多有用的功能,比如可以远程监控打印机的状态和保护打印机中存储的敏感信息。 安装Kyocera Client Tool很容易。首先,用户需要从Kyocera的官方网站上下载最新版本的安装程序。安装程序通常会以可执行文件格式提供,用户只需双击该文件即可开始安装。在安装过程中,用户需要按照提示逐步操作。其中包括同意许可协议,选择安装路径,选择安装组件等等。 安装完成后,用户需要打开Kyocera Client Tool并对其进行配置。用户需要输入Kyocera打印机的IP地址或主机名,然后使用默认或自定义的凭据进行身份验证以访问打印机。在成功连接到打印机后,用户可以使用Kyocera Client Tool来管理和监控打印机,例如,可以查看打印机的硬件和软件配置信息,设置打印机的打印选项,查看打印机的状态和错误日志等等。 总之,Kyocera Client Tool是一款非常实用的工具,可以帮助用户更好地管理和监控Kyocera打印机。它的安装和配置十分简单,只需按照提示即可完成。希望这篇回答能对你有所帮助。 ### 回答3: Kyocera client tool(以下简称KCT)是一款Kyocera复合机的管理软件,可以帮助管理员轻松地管理Kyocera复合机的配置、维护、监视和诊断等操作。这里将介绍KCT的安装过程。 首先,去Kyocera官网下载KCT。下载完成后,双击安装程序开始安装。安装过程中可能需要输入管理员权限,如有需要请进行授权。安装程序将自动安装KCT到默认文件夹下(一般是C:\Program Files (x86)\Kyocera\Client Tool)。安装过程将涉及到KCT所需的依赖库,如未安装,需要按照提示安装。 安装完成后,可以在开始菜单中找到KCT的快捷方式。首次运行需要进行设置,包括复合机的IP地址、通信端口、管理员账户等。设置完成后,KCT将根据设置自动与复合机建立连接。 KCT的主界面分为多个标签页,包括“状态监视”、“配置管理”、“设备维护”和“诊断”,每个标签页提供了不同的管理功能。在“状态监视”标签页中,可以查看复合机的基本状态信息,如打印作业、传输作业等。在“配置管理”标签页中,可以进行复合机的基础配置管理,如修改IP地址、设置安全选项等。在“设备维护”标签页中,可以查看设备日志、维护计划等设备信息。在“诊断”标签页中,则可以进行设备问题的快速排查。 需要注意的是,KCT只能应用于Kyocera品牌的复合机。安装过程中如果遇到问题,可以参考Kyocera官网提供的技术支持文档,或者联系Kyocera的技术支持人员。同时,使用KCT需要管理员账户,并且建议仅授权给合适的人员使用,以确保复合机的安全管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值