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. MyEclipse中将项目的编码从默认GBK改变为默认UTF-8

  2. swift的一些知识点(不断完善中)

    首先,隆重推荐文章http://www.infoq.com/cn/articles/swift-brain-gym-optional swift 烧脑体操!目前有4篇文章,说的都很好! 1. 应该充分 ...

  3. 石头剪刀布(智能判断你是否赢了)(if判断和for)

  4. MACE(1)-----环境搭建

    作者:十岁的小男孩 QQ:929994365 无为 本文仅用于学习研究,非商业用途,欢迎大家指出错误一起学习,文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. ...

  5. python 全栈开发,Day120(路由系统, 实例化Flask的参数, 蓝图(BluePrint), before_request after_request)

    昨日内容回顾 1.Flask: from flask import Flask app = Flask(__name__) # 从源码中可以看出,Flask集成的run方法是由werkzeug中的ru ...

  6. ThreadLocal详解,处理成员变量线程不安全的情况

    ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量. 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线 ...

  7. 委托----Func和Action

    平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后 ...

  8. 【C++】三大概念要分清--重载,隐藏(重定义,覆盖(重写)

    { c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)} 重载 •  概念:在同一个作用域内:函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类 ...

  9. springboot项目连接数据库报错

    学习SpringBoot也没有多久,今天SpringBoot连接数据库的时候报如下错误: java.sql.SQLException: The server time zone value '�й�� ...

  10. SQL中Union与Union All的区别

    在写SQL查询语句时,经常会碰到类似于这种的需求:查询年龄大于60岁的男职工以及所有出生于1950年的职工.在处理这种需求时,无法使用一条简单的SQL语句查询出所有满足条件的结果,此时就需要将这种需求 ...