Codeforces Round 654 Div.2 题解

感觉自己每次打CF都在划水。。。

A

很显然答案就是 $ \lceil \frac{n}{2} \rceil $

B

分情况讨论,当 $ n > r $ 时显然答案就是 $ \frac{r\times (r+1)}{2} $,然后再观察一下数据。。。

另一种的答案就是 $ \frac{n\times (n-1)}{2}+1 $。。。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef double dd;
const int N = 1e5+5;
const dd eps = 1e-8;
const int mod = 1e9+7;

int t;
ll n,r;

int main(){
  // freopen("input.txt","r",stdin);
  scanf("%d",&t);
  while(t--){
    scanf("%lld %lld",&n,&r);
    if(n <= r){
      printf("%lld\n",(n*(n-1)/2)+1);
    }
    else{
      printf("%lld\n",r*(r+1)/2);
    }
  }
  return 0;
}

C

题意:

给定了a个第一类糖果和b个第二类糖果,分别有n个第一种人和m个第二种人。

取糖果的规则时:

假设两种糖果当前数目为v和c:

  1. 当 v > c时,第一种人选第一种糖果,第二种人选第二种糖果
  2. 反之,第一种人选第二种糖果,第二种人选第一种糖果。

我们可以发现一个性质:第二种人总是选择当前最少的糖果,所以显然第二种人能得到的糖果最多有min(a,b)种,所以我们只需要判断 $ b \le \min(a,b) \(以及\) n + m \le a+b $ 即可

D

构造题,最后猜一下规律。。。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef double dd;
const int N = 1e5+5;
const dd eps = 1e-8;
const int mod = 1e9+7;
 
int table[320][320],t,n,k;
 
int main(){
  // freopen("input.txt","r",stdin);
  scanf("%d",&t);
  while(t--){
    scanf("%d%d",&n,&k);
    memset(table,0,sizeof(table));
    printf("%d\n",k%n == 0 ? 0 : 2);
    int p = 0,q = 0;
    while(k--){
      table[p+1][q+1] = 1;
      p++;q = (q+1)%n;
      if(p == n){
				p = 0;q = (q+1)%n;
      }
    }
    for(int i = 1;i <= n;i++){
      for(int j = 1;j <= n;j++) printf("%d",table[i][j]);
      printf("\n");
    }
  }
  return 0;
}
posted @ 2020-07-17 21:27  Init0xyz  阅读(29)  评论(0)    收藏  举报