我是靠谱客的博主 时尚冥王星,最近开发中收集的这篇文章主要介绍codeforces contest 344,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

http://codeforces.com/contest/344

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

B 344B Simple Molecules

题意:给出三个点的度数,求出三个点之间各有几条边。不能构成图输出impossible

题解:

解法一:贪心。每次选度最大的两个点连边。

解法二:知道所有点的度,由握手定理得知所有的边数,那么bc之间的边数=总边数-a的度。

比赛的时候只想出了解法一。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
#define de(x) cout << #x << "=" << x << endl
int main() {
int a,b,c;
while(~scanf("%d%d%d",&a,&b,&c)) {
int ab=0,bc=0,ca=0;
int flag=0;
for(;;) {
if(a==0&&b==0) {
flag=1;
break;
}
if(b==0&&c==0) {
flag=1;
break;
}
if(c==0&&a==0) {
flag=1;
break;
}
if(a<=b&&a<=c) {
--b;
--c;
++bc;
} else if(b<=a&&b<=c) {
--a;
--c;
++ca;
} else {
--a;
--b;
++ab;
}
if(a+b+c==0) {
break;
}
}
if(flag) {
puts("Impossible");
} else {
printf("%d %d %dn",ab,bc,ca);
}
}
return 0;
}






//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

E  343C  Read Time
题意:有n个针头,m个待读取的磁盘,给出针头和磁盘在坐标轴的位置,求针头的最大值最小。
题解:二分ans。check的写法见代码。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
#define de(x) cout << #x << "=" << x << endl
const int N=100005;
ll a[N],b[N],vis[N];
int n,m;
bool check(ll dis) {
int p=1;
for(int i=1;i<=n&&p<=m;++i) {
ll t=a[i];
if(b[p]<a[i]) {
if(dis<a[i]-b[p]) return 0;
ll t1=a[i]+dis-2*(a[i]-b[p]);
ll t2=a[i]+(dis-(a[i]-b[p]))/2;
t=max(t1,t2);
} else {
t+=dis;
}
while(p<=m&&b[p]<=t) ++p;
}
return p>m;
}
int main() {
while(~scanf("%d%d",&n,&m)) {
for(int i=1;i<=n;++i) scanf("%I64d",&a[i]);
for(int i=1;i<=m;++i) scanf("%I64d",&b[i]);
ll l=0,r=20000000005,ans=-1;
while(l<=r) {
ll mid=l+r>>1;
if(check(mid)) {
r=mid-1;
ans=mid;
} else {
l=mid+1;
}
}
printf("%I64dn",ans);
}
return 0;
}



最后

以上就是时尚冥王星为你收集整理的codeforces contest 344的全部内容,希望文章能够帮你解决codeforces contest 344所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部