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】的更多相关文章

  1. [Codeforces Round #461 (Div2)] 题解

    [比赛链接] http://codeforces.com/contest/922 [题解] Problem A. Cloning Toys          [算法] 当y = 0 ,   不可以 当 ...

  2. CodeForces round 967 div2 题解(A~E)

    本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉 最后一题没搞懂怎么做,恳请大神指教 欢迎大家在评论区提问. A Mind the Gap 稳定版题面 https://cn.vjudge.net/ ...

  3. Codeforces Round #467(Div2)题解

    凌晨起来打CF,0:05,也是我第一次codeforces 第一题: 我刚开始怀疑自己读错题了,怎么会辣么水. 判除了0的数字种类 #include <cstdio> ; ]; int m ...

  4. Codeforces Round#704 Div2 题解(A,B,C,D,E)

    FST ROUND !!1 A Three swimmers: 直接整除一下向上取整就好了: #include <bits/stdc++.h> using namespace std; t ...

  5. Codeforces Round#687 Div2 题解

    打这场的时候迷迷糊糊的,然后掉分了( A Prison Break: 题面很复杂,但是题意很简单,仅需求出从这个点到四个角的最大的曼哈顿距离即可 #include <bits/stdc++.h& ...

  6. CodeForces Round #516 Div2 题解

    A. Make a triangle! 暴力... 就是给你三个数,你每次可以选一个加1,问最少加多少次能构成三角形 #include <bits/stdc++.h> #define ll ...

  7. Codeforces Round #539 div2

    Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...

  8. Codeforces Round #543 Div1题解(并不全)

    Codeforces Round #543 Div1题解 Codeforces A. Diana and Liana 给定一个长度为\(m\)的序列,你可以从中删去不超过\(m-n*k\)个元素,剩下 ...

  9. Codeforces Round #545 Div1 题解

    Codeforces Round #545 Div1 题解 来写题解啦QwQ 本来想上红的,结果没做出D.... A. Skyscrapers CF1137A 题意 给定一个\(n*m\)的网格,每个 ...

随机推荐

  1. openwrt 添加 802.1x客户端njit

    1.修改feed的配置文件 feeds.conf.default 添加下面两句: src-svn njit https://github.com/liuqun/openwrt-clients/trun ...

  2. Go语言规格说明书 之 类型声明(Type declarations)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...

  3. HTML中的锚点设置和table格式

    锚点设置: <a href="#1">锚点</a> <a name="1"></a> table表格格式: &l ...

  4. redux最佳实践

     对于初学者,redux的理念很难理解.其实redux并不难,redux核心理念就是数据仓库,所有数据操作来源都是明确的.只不过不是直接操作数据,而是交给特定的角色做特定的工作,分工明确.   pro ...

  5. 【docker】资料

    https://yeasy.gitbooks.io/docker_practice/content/network/linking.html

  6. python 全栈开发,Day54(jQuery的属性操作,使用jQuery操作input的value值,jQuery的文档操作)

    昨日内容回顾 jQuery 宗旨:write less do more 就是js的库,它是javascript的基础上封装的一个框架 在前端中,一个js文件就是一个模块 一.用法: 1.引入包 2.入 ...

  7. 一.hadoop入门须知

    目录: 1.hadoop入门须知 2.hadoop环境搭建 3.hadoop mapreduce之WordCount例子 4.idea本地调试hadoop程序 5.hadoop 从mysql中读取数据 ...

  8. IntelliJ IDEA设置不自动打开最后关闭的项目

  9. 用两个int值实现读写锁

    private int readcount = 0; private int writecount = 0; public void lockread() throws InterruptedExce ...

  10. window 下忘记了mysql 密码的解决方法

    1.以管理员身份打开cmd,关闭MySQL. net stop mysql 2.跳过权限检查启动,进入安装目录bin下. mysqld --skip-grant-tables或者mysqld-nt - ...