Codeforces Round #262 (Div. 2)解题报告

news/2024/7/24 3:15:06 标签: 数据结构与算法


详见:http://robotcator.logdown.com/posts/221514-codeforces-round-262-div-2

1:A. Vasya and Socks   http://codeforces.com/contest/460/problem/A

有n双袜子,每天穿一双然后扔掉。每隔m天买一双新袜子,问最多少天后没有袜子穿。


简单思维题:曾经不注重这方面的训练,结果做了比較久。这样的题自己边模拟边想。只是要多考虑trick
```c++
int main(){
  int n, m;
  long long ans = 0;
  scanf("%d%d", &n, &m);
  ans = n/m*m;
  int tmp = n/m;
  int left = tmp + n%m;
  while(true){
    ans += left/m*m;
    tmp = left/m;
    left = tmp+left%m;
    if(left < m) break;
  }
  ans += left;
  printf("%I64d\n", ans);
  return 0;
}
```
2:B. Little Dima and Equation  http://codeforces.com/contest/460/problem/B
题意:
```mathjax
   求满足方程  x = b*S(x)^{a}+c方程解 \\  
   0 \lt x \lt 10^{9}   ,\ \  1 \le a \le 5 ,\ \ 1 \le b \le 10000 ,\ \ -10000 \le c \le 10000\\
   s(x) 为x每位数的和
```
题解:假设简单枚举x肯定超时,可是我们能够换个角度,枚举S(x)。这样就简单多了。由于依据右边就能够算出x..
```c++

int get_sum(long long x){
  int ans = 0;
  while(x){
    ans += x%10;
    x /= 10;
  }
  return ans;
}
int main(){
  int a, b, c;
  scanf("%d%d%d", &a, &b, &c);
  long long ans[maxn];
  int num = 0;
  for(int i = 1; i <= 81; i ++){
    long long tmp = 1;
    for(int j = 1; j <= a; j ++) tmp *= i;
    long long temp = b*tmp + c;
    if(temp > 1e9) continue;
    if(get_sum(temp) == i) {
      ans[num++] = temp;
    }
  }
  printf("%d\n", num);
  if(num > 0) {
    for(int i = 0; i < num; i ++)
      printf("%I64d ", ans[i]);
    printf("\n");
  }
  return 0;
}
```
3: C. Present  http://codeforces.com/contest/460/problem/C
题意:有n朵花,给出初始高度。然后能够浇m次水,每次浇水能够浇连续的w朵,每次浇水后花都会长高1个单位。

问最后最矮的那朵花最大值为多少。
题解:刚開始想,首先要贪心选出最矮的花和其相邻的花浇水。然后是a_(i) 到a_(i+w-1)加一个单位。当时没想到什么好的办法。于是我就想用线段树维护区间最小值,每次找出最小值的下界。然后往右w多花都浇水。刚開始在求下界时想了好久,只是联系一维情况还是写出来了。
```c++
long long a[maxn];
long long mm[4*maxn];
int setv[4*maxn];

void build(int root, int l, int r){
  int lc = 2*root, rc = 2*root+1;
  if(l < r){
    int mid = (l+r)/2;
    build(2*root, l, mid);
    build(2*root+1, mid+1, r);
    mm[root] = min(mm[lc], mm[rc]);
  }else{
    mm[root] = a[l];
  }
}

void pushdown(int root, int l, int r){
  int lc = 2*root, rc = 2*root+1;
  if(setv[root] > 0){
    setv[lc] += setv[root];
    setv[rc] += setv[root];
    mm[lc] += setv[root];
    mm[rc] += setv[root];
    setv[root] = 0;
  }
}

void pushup(int root, int l, int r){
  int lc = 2*root, rc = 2*root+1;
  mm[root] = min(mm[lc], mm[rc]);
}

void modify(int root, int l, int r, int x, int y, int s){
  if(x <= l && r <= y){
    mm[root] += s;
    setv[root] += s;
  }else{
    pushdown(root, l, r);
    int mid = (l+r)/2;
    if(x <= mid) modify(2*root, l, mid, x, y, s);
    if(y > mid) modify(2*root+1, mid+1, r, x, y, s);
    pushup(root, l, r);
  }
}

int minn;
void query(int root, int l, int r, int z){
  int lc = 2*root, rc = 2*root+1 , mid = (l+r)/2;
  if(l == r){
    if(l < minn) minn = l;
  }else{
    pushdown(root, l, r);
    if(mm[lc] <= z) query(lc, l, mid, z);
    else query(rc, mid+1, r, z);
    pushup(root, l, r);
  }
}

void print(int root, int l, int r){
    printf("%d %d\n", root, mm[root]);
    if(l < r){
      int mid = (l+r)/2;
      print(2*root, l, mid);
      print(2*root+1, mid+1, r);
    }
}

int main(){
  int w, n, m;
  scanf("%d%d%d", &n, &m, &w);
  for(int i = 1; i <= n; i ++)
    scanf("%d", &a[i]);
  memset(setv, 0, sizeof(setv));
  build(1, 1, n);
//  print(1, 1, n);
  for(int i = 1; i <= m; i ++){
    minn = inf;
    query(1, 1, n, mm[1]);
    //cout << minn << endl;
    if(n-minn+1 < w) modify(1, 1, n, n-w+1, n, 1);
    else modify(1, 1, n, minn, minn+w-1, 1);
  }
  printf("%I64d\n", mm[1]);
  return 0;
}
```
昨晚上面两题时间还有15分钟左右,后两题没想出什么好办法。

下次再补上。


http://www.niftyadmin.cn/n/1499089.html

相关文章

【微信小程序】微信小程序把页面做成图片分享

作者&#xff1a;harbour 链接&#xff1a;http://blog.yayuanzi.com/23508.html开发微信小程序的时候&#xff0c;经常要遇到如上图这样的&#xff0c;保存小程序二维码图片的分享功能。 网上找了很多都没有具体的写法&#xff0c;于是自己看官方文档写了一个&#xff0c;分享…

CentOS和Ubuntu系统下安装vsftp(助推大数据部署搭建)

不多说&#xff0c;直接上干货&#xff01; 同时&#xff0c;声明&#xff0c;我这里安装的vsftp&#xff0c;仅仅只为我的大数据着想&#xff0c;关于网上的复杂安装&#xff0c;那是服务和运维那块。我不多牵扯&#xff0c;也不多赘述。 一、CentOS系统里安装vsftp 第一步&am…

【微信小程序】微信退款注意事项及退款通知信息解密

1.商户退款单号 (out_refund_no)必须唯一&#xff0c;如果不唯一微信端返回的错误提示是“支付单号校验不一致”&#xff0c;需要注意。 2.退款解密算法注意操作密钥。在此记录下解密代码。 &#xff08;1&#xff09;对加密串A做base64解码&#xff0c;得到加密串B &#x…

【JS】js常用方法

function obj$(id) //根据id得到对象 function val$(id) //根据id得到对象的值 function trim(str) //删除左边和右边空格 function ltrim(str) //删除左边空格 function rtrim(str) //删除右边空格 function isEmpty(str) //字串是否有值 function equals(str1, str2) //js判断…

redis持久化快速回忆手册

Redis提供的持久化机制&#xff1a; 1). RDB持久化&#xff1a;该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2). AOF持久化:该机制将以日志的形式记录服务器所处理的每一个写操作&#xff0c;在Redis服务器启动之初会读取该文件来重新构建数据库&#xff0c…

你真的会用Gson吗?Gson使用指南(3)

原文出处&#xff1a; 怪盗kidou 注&#xff1a;此系列基于Gson 2.4。 本次的主要内容&#xff1a; 字段过滤的几种方法 基于Expose注解基于版本基于访问修饰符基于策略&#xff08;作者最常用&#xff09;POJO与JSON的字段映射规则一、字段过滤的几种方法 字段过滤Gson中比较常…

更强力的Windows Service Wrapper工具 -- WinSW

2019独角兽企业重金招聘Python工程师标准>>> 和Java Service Wrapper一样&#xff0c;WinSW也可以将java的jar程序转为windows服务&#xff0c;而且&#xff1a; 配置文件更精简直观运行更简便免费开源&#xff01;1、下载&#xff1a; 可以直接在GitHub上下载&…

【微信小程序】微信小程序code换取token

在小程序开发的过程中。我们在处理登录模块的时候需要拿到token值。根据官方文档的描述,这一过程需要与后端同事共同配合才能拿到。 // 登录wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionId// console.log(res)if (res.code) {//发起…