Codeforces Round #407 div2 题解【ABCDE】
Anastasia and pebbles
题意:你有两种框,每个框可以最多装k重量的物品,但是你每个框不能装不一样的物品。现在地面上有n个物品,问你最少多少次,可以把这n个物品全部装回去。
题解:其实就是问你得用多少次框,然后把多少次除以2就好了。每次装k的物品装回去就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int a[maxn],n,k;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
long long ans = 0;
for(int i=1;i<=n;i++){
ans+=(a[i]+k-1)/k;
}
cout<<(ans+1)/2LL<<endl;
}
Masha and geometric depression
题意:给你一个b1,q,再给你一个l,m,和m个数a[i]。然后你需要把不等于a[i],且小于等于l的数记录下来。
题解:直接暴力就好了,因为等比数列跑得特别快,如果要超过l的话,会很快的超过l了,而且如果答案有限的话,显然不会超过200?所以直接暴力吧。
代码:
#include<bits/stdc++.h>
using namespace std;
set<long long> S;
long long b,q,l,m;
map<long long,int>H;
int main(){
cin>>b>>q>>l>>m;
for(int i=0;i<m;i++){
long long k;
cin>>k;
S.insert(k);
}
int time = 0;
int ans = 0;
long long now = b;
while(time<500000){
time++;
if(abs(now)>l)break;
if(S.find(now)==S.end()){
ans++;
}
now=now*q;
}
if(ans>30000){
cout<<"inf"<<endl;
}else{
cout<<ans<<endl;
}
}
Functions again
题意:定义f(l,r)=sigma(abs(a[i]-a[i+1)*(-1)^(i-l)),给你n个数,找到最大的f(l,r)
题解:跑一个前缀和,然后你要奇数位置开头的,那么就正常做。如果是偶数位置开始的话,那么就乘上一个-1就好了嘛。掏个set算前缀的最小值和最大值。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
long long a[maxn],b[maxn],c[maxn];
int n;
set<long long>A,B;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
cin>>a[i];
if(n==2){
cout<<abs(a[1]-a[2])<<endl;
return 0;
}
for(int i=1;i<n;i++){
b[i]=abs(a[i]-a[i+1]);
if(i%2==1)c[i]=c[i-1]+b[i];
else c[i]=c[i-1]-b[i];
}
A.insert(c[1]);
B.insert(c[2]);
long long ans = max(c[1],c[2]);
ans=max(ans,abs(a[2]-a[3]));
for(int i=3;i<n;i++){
ans=max(ans,c[i]);
ans=max(ans,c[i]-*B.begin());
ans=max(ans,c[i]-*--B.end());
ans=max(ans,-(c[i]-*A.begin()));
ans=max(ans,-(c[i]-*--A.end()));
if(i%2==1)A.insert(c[i]);
else B.insert(c[i]);
}
cout<<ans<<endl;
}
D. Weird journey
题意: 给你一个图,这个图有自环,现在问你有多少个路径满足可以经过m-2条边两次,剩下两条边一次。
题解:答案为 自环与自环相组合,自环和其他边组合,其他边和其他边组合。其中其他边和其他边组合的时候,必须要挨在一起。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int n,m;
vector<int>E[maxn];
int Cnt,flag[maxn],vis[maxn],d[maxn];
void dfs(int x){
vis[x]=1;
for(int i=0;i<E[x].size();i++){
Cnt++;
if(E[x][i]==0){
Cnt++;
continue;
}
if(vis[E[x][i]])continue;
dfs(E[x][i]);
}
}
int main(){
scanf("%d%d",&n,&m);
int st = 1,cnt = 0,cnt2 = 0;
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
if(a==b){
cnt ++;
flag[a]++;
E[a].push_back(0);
E[0].push_back(a);
}else{
st=a;
cnt2++;
d[a]++;d[b]++;
E[a].push_back(b);
E[b].push_back(a);
}
}
dfs(st);
if(Cnt!=m*2){
cout<<"0"<<endl;
return 0;
}
long long ans = 0;
ans=ans+1ll*cnt*cnt2;
ans=ans+1ll*cnt*(cnt-1)/2;
for(int i=1;i<=n;i++){
ans=ans+1ll*d[i]*(d[i]-1)/2;
}
cout<<ans<<endl;
}
E. The Great Mixing
题意:现在有k个物品xi/1000,你现在可以任意挑选,并随便使用,你需要调制出n/1000的物品,问你最少使用多少个。
题解:首先去重,那么k最多只有1001了。然后我们让所有的xi减去n,然后就可以理解为凑0了,然后就可以跑完全背包。第一维的个数最多1000个,第二维的范围就是[-1000,1000]。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k;
const int maxn = 1e6+7;
int a[maxn];
vector<int>v;
map<int,int> dp[2003];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++){
scanf("%d",&a[i]);
a[i]-=n;
v.push_back(a[i]);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
dp[0][0]=1;
map<int,int>::iterator it;
for(int i=1;i<=1002;i++){
for(it=dp[i-1].begin();it!=dp[i-1].end();it++){
for(int j=0;j<v.size();j++){
if(abs(it->first+v[j])>1000)continue;
dp[i][it->first+v[j]]=1;
}
}
if(dp[i].count(0)){
printf("%d\n",i);
return 0;
}
}
printf("-1\n");
//ax+by+...+t=n*1000(a+b+c+..+);
}
Codeforces Round #407 div2 题解【ABCDE】的更多相关文章
- [Codeforces Round #461 (Div2)] 题解
[比赛链接] http://codeforces.com/contest/922 [题解] Problem A. Cloning Toys [算法] 当y = 0 , 不可以 当 ...
- CodeForces round 967 div2 题解(A~E)
本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉 最后一题没搞懂怎么做,恳请大神指教 欢迎大家在评论区提问. A Mind the Gap 稳定版题面 https://cn.vjudge.net/ ...
- Codeforces Round #467(Div2)题解
凌晨起来打CF,0:05,也是我第一次codeforces 第一题: 我刚开始怀疑自己读错题了,怎么会辣么水. 判除了0的数字种类 #include <cstdio> ; ]; int m ...
- Codeforces Round#704 Div2 题解(A,B,C,D,E)
FST ROUND !!1 A Three swimmers: 直接整除一下向上取整就好了: #include <bits/stdc++.h> using namespace std; t ...
- Codeforces Round#687 Div2 题解
打这场的时候迷迷糊糊的,然后掉分了( A Prison Break: 题面很复杂,但是题意很简单,仅需求出从这个点到四个角的最大的曼哈顿距离即可 #include <bits/stdc++.h& ...
- CodeForces Round #516 Div2 题解
A. Make a triangle! 暴力... 就是给你三个数,你每次可以选一个加1,问最少加多少次能构成三角形 #include <bits/stdc++.h> #define ll ...
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- Codeforces Round #543 Div1题解(并不全)
Codeforces Round #543 Div1题解 Codeforces A. Diana and Liana 给定一个长度为\(m\)的序列,你可以从中删去不超过\(m-n*k\)个元素,剩下 ...
- Codeforces Round #545 Div1 题解
Codeforces Round #545 Div1 题解 来写题解啦QwQ 本来想上红的,结果没做出D.... A. Skyscrapers CF1137A 题意 给定一个\(n*m\)的网格,每个 ...
随机推荐
- android手机访问app网页报错:net::ERR_PROXY_CONNECTION_FAILED
手机访问网页报错:net::ERR_PROXY_CONNECTION_FAILED 手机访问app中嵌入的html网页报错: net::ERR_PROXY_CONNECTION_FAILED 原来是手 ...
- centos 编译安装PHP5.4
2013年12月29日 19:52:30 已经安装好Apache 2.4 php版本 5.4 ./configure --prefix=/usr/local/lamp/php --with-apxs2 ...
- 如何在DOS窗口复制和粘贴命令
在键盘上按下windows+R键,打开运行窗口. 在“打开”处输入cmd,并按下enter键,打开DOS窗口. 把鼠标移动到DOS窗口标题处,单击鼠标右键,选择属性. 把编辑选项处的“快速编辑模式”勾 ...
- AndroidStudio中builde.gradle文件详解
Android Studio是采用Gradle来构建项目的,一个Android项目中包含两个build.gradle文件,如下图: (1)最外层目录下build.gradle文件 最外层目录下 ...
- SQL开发测试使用基础
目录 一.客户端配置与使用 1.oracle(PLSQL Developer) 2.hive(hive cli)及命令 3.postgre(pgAdmin) 二.注意事项及基础 ...
- LeetCode(7):颠倒整数
Easy! 题目描述:给定一个范围为 32 位 int 的整数,将其颠倒. 例1: 输入:132 输出:321 例2: 输入:-123 输出:-321 例3: 输入:120 输出:21 注意:假设我们 ...
- 升级 php composer 版本
在执行 composer update 时,报错 You made a reference to a non-existent script @php artisan package:discover ...
- jquery----用户密码验证
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python接口自动化测试二十五:执行所有用例,并生成HTML测试报告
import requestsimport unittest class TestQQ(unittest.TestCase): '''测试QQ号接口''' # 此注释将展示到测 ...
- python 全栈开发,Day6(is,小数据池,编码转换)
一.is a = 100 b = 100 print(a == b) print(a is b) 执行输出: TrueTrue 查看内存地址,使用id函数 print(id(a)) print(id( ...