Codeforces Round 654 Div.2 题解
感觉自己每次打CF都在划水。。。
A
很显然答案就是
B
分情况讨论,当 时显然答案就是,然后再观察一下数据。。。
另一种的答案就是。。。
#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:
- 当 v > c时,第一种人选第一种糖果,第二种人选第二种糖果
- 反之,第一种人选第二种糖果,第二种人选第一种糖果。
我们可以发现一个性质:第二种人总是选择当前最少的糖果,所以显然第二种人能得到的糖果最多有min(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;
}