Codeforces Round #262 (Div. 2)解題報告

來源:互聯網
上載者:User

標籤:http   os   io   for   div   amp   log   時間   


詳見: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分鐘左右,後兩題沒想出什麼好辦法。下次再補上。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.