Codeforces Round #277 (Div. 2 Only)
A:SwapSort
http://codeforces.com/problemset/problem/489/A
题目大意:将一个序列排序,可以交换任意两个数字,但要求交换的次数不超过n,输出任意一种方案即可
思路:真心想复杂了,排个序,然后按顺序把每个数交换到它应该在的地方即可
#include <stdio.h>
#include <algorithm>
#define maxn 40000
using namespace std;
struct T{int x;int y;}a[maxn];
int cmp(T a,T b){return a.x<b.x;}int b[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i].x),a[i].y=i;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)b[a[i].y]=i;
printf("%d\n",n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)if(b[j]==i)
{
printf("%d %d\n",i-1,j-1);
int t=b[j];b[j]=b[i];b[i]=t;break;
}
return 0;
}
B:BerSU Ball
http://codeforces.com/problemset/problem/489/B
题目大意:n个男孩m个女孩配对,要求男女的身高差不能1,问最多能有几对配对
思路:裸的二分匹配
#include <stdio.h>
#include <string.h>
#define maxn 40000
using namespace std;
int head[maxn],point[maxn],next[maxn],now,match[maxn],a[maxn],b[maxn];
bool visit[maxn];
void add(int x,int y){next[++now]=head[x];head[x]=now;point[now]=y;}
int dfs(int k){
for(int i=head[k];i;i=next[i]){
int u=point[i];
if(visit[u]==0){
visit[u]=1;
if(match[u]==-1 || dfs(match[u])){match[u]=k;return 1;}
}
}
return 0;
}
int main(){
int n,m,ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d",&b[i]);
for(int j=1;j<=n;j++)
if((abs(a[j]-b[i])<=1))add(i,j);
}
memset(match,-1,sizeof(match));
for(int i=1;i<=m;i++){
memset(visit,0,sizeof(visit));if(dfs(i))ans++;
}
printf("%d\n",ans);
return 0;
}
C:C. Given Length and Sum of Digits...
http://codeforces.com/problemset/problem/489/C
题目大意:给出m和s,要求满足长度为m,各位和相加等于s的十进制的最小和最大的数
思路:小数据自己看一下随便搞一下就可以了 注意2 18/ 3 18之类的数据即可AC
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 40000
using namespace std;int main(){
int m,s;
scanf("%d%d",&m,&s);
if(m==1&&s==0){printf("%d %d\n",0,0);return 0;}
int v=s%9,u=s/9,l=u+(v==0?0:1);
if(l>m||(s==0&&m>1)){printf("-1 -1\n");return 0;}
if(v!=0){
if(l==m){printf("%d",v);
for(int i=1;i<=u;i++)printf("9");printf(" ");
for(int i=1;i<=u;i++)printf("9");printf("%d",v);
for(int i=1;i<=m-1-u;i++)printf("0");printf("\n");
}else{
printf("1");v--;
for(int i=1;i<=m-u-2;i++)printf("0");printf("%d",v);
for(int i=1;i<=u;i++)printf("9");printf(" ");v++;
for(int i=1;i<=u;i++)printf("9");printf("%d",v);
for(int i=1;i<=m-1-u;i++)printf("0");printf("\n");
}
}
else if(l==m){
for(int i=1;i<=m;i++)printf("9");printf(" ");
for(int i=1;i<=m;i++)printf("9");
}
else
{
printf("1");
for(int i=1;i<=m-u-1;i++)printf("0");printf("8");
for(int i=1;i<=u-1;i++)printf("9");printf(" ");
for(int i=1;i<=u;i++)printf("9");for(int i=1;i<=m-u;i++)printf("0");
printf("\n");
}
return 0;
}
D:Unbearable Controversy of Being
http://codeforces.com/problemset/problem/489/D
题目大意:给出一个有向图,求图中存在多少个“"damn rhombus"”结构,一个“"damn rhombus"”定义为图中的菱形,即a到d同时有a->b->d的路径和a->c->d的路径
思路:还以为神题,打个暴力就过了,具体做法的话枚举每个点为起点,记录走两步路到达每个点的次数v[i],然后求一下ΣC(2,v[i])就是该点为起点的"damn rhombus"的个数
#include <stdio.h>
#include <string.h>
#define maxn 60009
using namespace std;
int head[maxn],point[maxn],next[maxn],now,vv[maxn];
bool visit[maxn];int a[maxn],b[maxn];void add(int x,int y){
next[++now]=head[x];
head[x]=now;
point[now]=y;}void dfs(int k){
visit[k]=1;
for(int i=head[k];i;i=next[i])
{
int u=point[i];
visit[u]=1;
for(int j=head[u];j;j=next[j])if(!visit[point[j]])
{
int v=point[j];
vv[v]++;
}
visit[u]=0;
}
visit[k]=0;}int main(){
int n,m,x,y;
long long an=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);add(x,y);
}
for(int i=1;i<=n;i++)
{
dfs(i);
for(int j=1;j<=n;j++)
{
an+=(vv[j]*(vv[j]-1))>>1;
vv[j]=0;
}
}
printf("%I64d\n",an);
return 0;
}
E: Hiking
http://codeforces.com/problemset/problem/489/E
题目大意:一维的x轴,上面有n个可供晚上休息的地点,一个人从0号点走到n号点,选择一些点Xi休息,他每天希望走l公里,所以他的失望程度等于Σsqrt(Xi-X(i-1)-l)/Σbi 在使失望程度最小的前提下他应该选择哪些点?
思路:一开始直接DP分子分母,然后发现不满足无后效性,喵了一眼标签确定是二分后才想到是01分数规划问题,二分最小值,我们接下来就是要让Σsqrt(Xi-X(i-1)-l)-k*bi最小,然后判断正负即可
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <iostream>
#define maxn 40000
#define esp 0.00000001
using namespace std;
int x[maxn],b[maxn],last[maxn],ans[maxn],n,l,h=0;
double dp[maxn];
double min(double x,double y){return x<y?x:y;}
int judge(double k)
{
for(int i=1;i<=n;i++)
{
dp[i]=0x3f3f3f3f;
for(int j=0;j<i;j++){
double u=dp[j]+sqrt(abs(x[i]-x[j]-l))-k*b[i];
if(u<dp[i])dp[i]=u,last[i]=j;
}
}if(dp[n]>=0)return 1;else return 0;
}
int main()
{
scanf("%d%d",&n,&l);
for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&b[i]);
double l=0,r=1e5+1;
while(r-l>esp)
{
memset(last,-1,sizeof(last));
double mid=(l+r)/2;
if(judge(mid))l=mid;else r=mid;
}
int idx=n;
while(last[idx]!=-1)ans[++h]=idx,idx=last[idx];
for(int i=h;i>=1;i--)printf("%d ",ans[i]);
return 0;
}
Codeforces Round #277 (Div. 2 Only)的更多相关文章
- Codeforces Round #277 (Div. 2) 题解
Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...
- 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation
题目传送门 /* 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 */ /************************************************ ...
- 【codeforces】Codeforces Round #277 (Div. 2) 解读
门户:Codeforces Round #277 (Div. 2) 486A. Calculating Function 裸公式= = #include <cstdio> #include ...
- Codeforces Round #277 (Div. 2) E. LIS of Sequence DP
E. LIS of Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/pr ...
- Codeforces Round #277 (Div. 2) D. Valid Sets 暴力
D. Valid Sets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/problem ...
- Codeforces Round #277 (Div. 2) B. OR in Matrix 贪心
B. OR in Matrix Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/probl ...
- Codeforces Round #277 (Div. 2) A. Calculating Function 水题
A. Calculating Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/4 ...
- Codeforces Round #277 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...
- codeforces水题100道 第十题 Codeforces Round #277 (Div. 2) A. Calculating Function (math)
题目链接:www.codeforces.com/problemset/problem/486/A题意:求表达式f(n)的值.(f(n)的表述见题目)C++代码: #include <iostre ...
随机推荐
- A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)
在Unity3d中,我们一般常用的寻路算法: 1.A*算法插件 与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解.A*是静态网格中求解最短路最有效的方法.也是耗时的算法,不 ...
- jQuery选择器之可见性选择器
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- 【HEVC帧间预测论文】P1.7 Content Based Hierarchical Fast Coding Unit Decision Algorithm
Content Based Hierarchical Fast Coding Unit Decision Algorithm For HEVC <HEVC标准介绍.HEVC帧间预测论文笔记> ...
- 洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光
题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆……烟花响起(来自中 ...
- (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案二
http://blog.csdn.net/yerenyuan_pku/article/details/52894958 前面我们已经集成了Spring4.2.5+Hibernate4.3.11+Str ...
- tcp 三次握手四次挥手
1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说 ...
- 进程池_Pool
当需要创建子进程数量不多的时候,可以直接利用multiprocessing中的Process动态生成多个进程 但是如果是成百甚至上千个任务,手动地创建它的工作量很大,此时就可以利用到multiproc ...
- CAD交互绘制虚线(网页版)
用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE ...
- 第三周:Excel
一.Excel的常见函数: 1.文本清洗函数: https://ask.hellobi.com/blog/cbdingchebao/10149
- JSON parse error: Can not construct instance of model.Class: no suitable constructor found
reference:http://blog.csdn.net/qq_33642117/article/details/51909346 当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函 ...