Codeforces Round #643 (Div.2)
前言:这套cf我感觉出的很不错,AB就不说了,唯一有点欠缺的就是C和D的位置应该换一下,C出的挺不错,反正我当时没有想出来(赛后补题的时候其实也不难。。听朋友说还可以FFT优化,然而我是个图论手并不会数论)。D就是个一眼构造题,也没什么意思。E也是个不错的三分题,至少加强了我对三分的认知。F过的人太少,不补了叭
A:Sequence with Digits
签到题不详细讲了,直接上代码吧...
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long ll a, b; int main()
{
int t;
cin >> t;
while (t--)
{
cin >> a >> b;
int cnt = ;
while ()
{
if (cnt == b)
break;
int ma = , mi = ;
ll tmp = a;
while (tmp > )
{
int now = tmp % ;
ma = max(ma, now), mi = min(mi, now);
tmp /= ;
}
if (mi == )
break;
cnt++;
a += mi * ma;
}
cout << a << "\n";
}
}
B:Young Explorers
这个题也没什么意思,签到
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+;
const int maxn=1e6+;
int a[maxn];
int main(){
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
}
sort(a+,a+n+);
int res=;int sum=;
for(int i=;i<=n;i++)
{
sum++;
if(a[i]<=sum)
{
sum=;res++;
}
}
cout<<res<<endl;
}
}
C:Count Triangles
解法:很显然,这个题2层for循环肯定爆TLE,那么就需要优化了。众所周知,构成三角形的条件是:x+y>z,那么我可以进行枚举x+y来优化,令m=x+y,算出当x+y和为m的时候,有几种可行的构造数量s2,然后去乘s1=max(m-1,d)-c+1就可以了,前提是s1和s2均非0
∵x+y=m, ∴y=m-x, 又∵B≤y=m-x≤C,∴m-C≤x≤m-B,又因为A≤x≤B,所以取交集,该组数目等于右界-左界+1
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+;
const int maxn=5e5+;
int main(){
int a,b,c,d;cin>>a>>b>>c>>d;
ll ans=;
for(int i=a+b;i<=b+c;i++){
int s1=min(d,i-)-c+;
int s2=min(i-b,b)-max(i-c,a)+;
if(s1<||s2<) continue;
else ans+=1LL*s1*s2;
}
cout<<ans<<endl;
}
D. Game With Array
解法:构造n-1个1和1个s-n+1,判断s-n+1>n的情况是否存在,存在就输出yes,反之输出no
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+;
const int maxn=1e6+;
int a[maxn];
int main(){
int n,s;cin>>n>>s;
if(s<=*n-) puts("NO");
else{
puts("YES");
for(int i=;i<n;i++){
cout<<<<" ";
}
cout<<s-n+<<endl;
cout<<s-n<<endl;
}
}
E. Restorer Distance
解法:三分高度,因为这个题是求最小花费,所以图像是与y=x^2很类似,针对曲线求最小值就是三分。另外up就是需要增加的砖块数,down就是需要减少的砖块数。显然总花费=ans=A*up+R*down;倘若A+R>M,那么就需要减少总花费了,此时x=min(up,down),ans+=M*x-x*A-x*R;
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+;
const int maxn=1e5+;
int N,A,R,M,a[maxn];
ll check(int mid){
ll ans=,up=,down=;
rep(i,,N){
if(a[i]<mid)up+=mid-a[i];
else down+=a[i]-mid;
}
ans=A*up+R*down;
ll x=min(up,down);
if(A+R>M) ans+=M*x-x*A-x*R;
return ans;
}
int main(){
cin>>N>>A>>R>>M;
rep(i,,N) cin>>a[i];
int l=,r=1e9;
while(l<r){
int midl=(r-l)/+l,midr=r-(r-l)/;
ll suml=check(midl),sumr=check(midr);
if(suml>sumr) l=midl+;
else r=midr-;
}
ll ans=check(l);
cout<<ans<<endl;
}
Codeforces Round #643 (Div.2)的更多相关文章
- Codeforces Round #643 (Div. 2)(C ~ E)
C. Count Triangles 题目链接 : https://codeforces.com/contest/1355/problem/C 题目大意 : 给你 A , B , C , D 问有多少 ...
- Codeforces Round #643 (Div. 2) 题解 (ABCDE)
目录 A. Sequence with Digits B. Young Explorers C. Count Triangles D. Game With Array E. Restorer Dist ...
- Codeforces Round #643 (Div. 2) B. Young Explorers (思维,贪心)
题意:给你一组人\(a\),现在要将这些人进行分组,对于\(i\),只有某一组的人数\(\ge a_{i}\)时,\(i\)才可以加入这个组,问最多能够有多少组,(不必将所有人都选用). 题解:我们将 ...
- Codeforces Round #643 (Div. 2) E. Restorer Distance (贪心,三分)
题意:给你\(n\)个数,每次可以使某个数++,--,或使某个数--另一个++,分别消耗\(a,r,m\).求使所有数相同最少的消耗. 题解:因为答案不是单调的,所以不能二分,但不难发现,答案只有一个 ...
- Codeforces Round #643 (Div. 2) C. Count Triangles (数学公式)
题意:给你四个正整数\(A,B,C,D\),且\(A\le B\le C \le D\),有\(A\le x\le B\le y\le C \le z\le D\),求最多有多少组\((x,y,z)\ ...
- Codeforces Round #643 (Div. 2) D. Game With Array (思维,构造)
题意:给你两个正整数\(N\)和\(S\),构造一个长度为\(N\)并且所有元素和为\(S\)的正整数数组,问是否能找到一个\(K (0\le K \le S)\)使得这个数组的任意_子数组_的和都不 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
随机推荐
- shiro:集成Springboot(六)
1:导入相关依赖 <!--thymeleaf 模板引擎依赖包--> <dependency> <groupId>org.springframework.boot&l ...
- SpringBoot word 转换为 pdf
转换文件 swagger 地址, 基于 SpringBoot 开发 http://119.27.167.41:8888/convertor/swagger-ui.html 带有图片的word 转换体验 ...
- pytorch中CUDA类型的转换
import torch import numpy as np device = torch.device("cuda:0" if torch.cuda.is_available( ...
- C#线程学习笔记
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/Thread.html,记录一下学习,方便后面资料查找 一.线程的介绍 进程(Proce ...
- ES6中对象的扩展
ES6不仅为字符串.数值和数组带来了扩展,也为对象带来了很多新特性.这一节,我们来一起学习一下对象的扩展. 对象的传统表示法 我们回顾一下,对象的传统表示法: let person = { " ...
- 数据挖掘入门系列教程(十一)之keras入门使用以及构建DNN网络识别MNIST
简介 在上一篇博客:数据挖掘入门系列教程(十点五)之DNN介绍及公式推导中,详细的介绍了DNN,并对其进行了公式推导.本来这篇博客是准备直接介绍CNN的,但是想了一下,觉得还是使用keras构建一个D ...
- Manjaro Linux 入门使用教程
Manjaro 初体验 Manjaro 是一款基于 Arch LInux 的自由开源发行版,它吸收了 Arch Linux 优秀丰富的软件管理,同时提供了稳定流畅的操作体验.优雅简单是它的追求,稳定实 ...
- js基石之---易读、易复用、易重构的 JavaScript 代码规范
易读.易复用.易重构的 JavaScript 代码规范 1.变量命名规范有意义 Bad: const yyyymmdstr = moment().format("YYYY/MM/DD&quo ...
- Linux网络服务第七章DNS域名解析服务
端口:53 一.DNS服务器 正向解析:根据域名查IP地址,即将指定的域名解析为相对应的IP地址.域名的正向解析是DNS服务器最基本的功能,也是最常用的功能. 反向解析:根据IP地址查域名,即将指定的 ...
- 【ubuntu】Error: environment block too small. Press any key to continue
Error: environment block too small. Press any key to continue 如何修复这个Error呢? 输入以下命令 sudo su cd /boot/ ...