Codeforces Round #262 (Div. 2)解题报告_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:59:31
原创
1425人浏览过


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

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

猫眼课题宝
猫眼课题宝

5分钟定创新选题,3步生成高质量标书!

猫眼课题宝85
查看详情 猫眼课题宝
有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   }
  ans += left;
  printf("%I64d ", 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     long long tmp = 1;
    for(int j = 1; j     long long temp = b*tmp + c;
    if(temp > 1e9) continue;
    if(get_sum(temp) == i) {
      ans[num++] = temp;
    }
  }
  printf("%d ", num);
  if(num > 0) {
    for(int i = 0; i       printf("%I64d ", ans[i]);
    printf(" ");
  }
  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     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     mm[root] += s;
    setv[root] += s;
  }else{
    pushdown(root, l, r);
    int mid = (l+r)/2;
    if(x     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   }else{
    pushdown(root, l, r);
    if(mm[lc]     else query(rc, mid+1, r, z);
    pushup(root, l, r);
  }
}

void print(int root, int l, int r){
    printf("%d %d ", root, mm[root]);
    if(l       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     scanf("%d", &a[i]);
  memset(setv, 0, sizeof(setv));
  build(1, 1, n);
//  print(1, 1, n);
  for(int i = 1; i     minn = inf;
    query(1, 1, n, mm[1]);
    //cout     if(n-minn+1     else modify(1, 1, n, minn, minn+w-1, 1);
  }
  printf("%I64d ", mm[1]);
  return 0;
}
```
昨晚上面两题时间还有15分钟左右,后两题没想出什么好办法。下次再补上。
HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号