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\)的网格,每个 ...
随机推荐
- 【bzoj2653】【middle】【主席树+二分答案】
Description 一个长度为 n 的序列 a ,设其排过序之后为 b ,其中位数定义为 b[n/2] ,其中 a,b 从 0 开始标号 , 除法取下整. 给你一个长度为 n 的序列 s .回答 ...
- cocos2d-x在App中的应用
cocos2d-x是一个应用广泛的开源游戏引擎,主要是应用与开发2D游戏,开源运行于多个平台,如果只是针对于移动端平台而言,可以运行于android和ios平台. cocos2d-x目前的版本是3.1 ...
- insmod 时报错“Unknown symbol”问题的解决
在加载驱动模块时报错: “ Unknown symbol CFG80211_SupBandReInit (err 0)” 查看了内核代码以及加载上的symbol(命令为 cat /proc/kalls ...
- jmeter之beanshell取出需要参数,传递给下个请求
jmeter之beanshell取出需要参数,传递给下个请求 事件背景: 上周同事用jmeter录制脚本,录制成功回放后,并没有达到自己想要的结果. ps:他想从数据库取出某个字段值,然后对数据库做操 ...
- Eclipse通过jdbc连接sqlserver2008数据库的两种方式
数据库登录身份验证方式有两种 其中服务器名称即为安装SQLServer2008的电脑,充当数据库服务器,在笔者这里就是自己的电脑名称. 身份验证方式有两种:windows身份验证和SQLSer ...
- 使用mybatis-spring-boot-starter如何打印sql语句
只需要将接口文件的日志设置为debug即可. 例如你的mapper接口所在的文件夹是 com.demo.mapper 那么在application.properties配置文件中添加 logging. ...
- SPLAY,LCT学习笔记(二)
能够看到,上一篇的代码中有一段叫做find我没有提到,感觉起来也没有什么用,那么他的存在意义是什么呢? 接下来我们来填一下这个坑 回到我们的主题:NOI 2005维修数列 我们刚刚讨论了区间翻转的操作 ...
- Android Rom build.prop文件详解
# begin build properties # autogenerated by buildinfo.sh #以下内容由脚本在编译时自动产生 ro.build.id=6.7.7_97 ...
- php 发送超大数据处理
set_time_limit(0);//设置永不超时 ignore_user_abort(); //设置客户端断开,继续处理 //总数 $allusercount= $this->gamedb_ ...
- [转] 详解webpack-dev-server的使用
webpack-dev-server是一个小型的Node.js Express服务器,它使用webpack-dev-middleware来服务于webpack的包,除此自外,它还有一个通过Sock.j ...