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

  1. Codeforces Round #277 (Div. 2) 题解

    Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...

  2. 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation

    题目传送门 /* 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 */ /************************************************ ...

  3. 【codeforces】Codeforces Round #277 (Div. 2) 解读

    门户:Codeforces Round #277 (Div. 2) 486A. Calculating Function 裸公式= = #include <cstdio> #include ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. Codeforces Round #277 (Div. 2) A. Calculating Function 水题

    A. Calculating Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/4 ...

  8. Codeforces Round #277 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...

  9. 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 ...

随机推荐

  1. DNS递归查询、主从、加密认证、负载均衡

    环境同DNS练习之正向解析. 在sishen64主机上安装必要软件 [root@sishen64 ~]# yum install -y bind bind-chroot bind-libs bind- ...

  2. qconbeijing2018

    https://2018.qconbeijing.com/schedule 会议 · 第一天 (2018/04/20 周五) 时间 日程 上午 主题演讲 大数据下的软件质量建设实践 黄闻欣 出品 人工 ...

  3. [转]Linq 如何实现 in 与 not in

    本文转自:http://blog.csdn.net/zhangyumei/article/details/5620363 接触 LINQ 也有很长的一段时间了,有些在 SQL 语句中用的很顺手的东西在 ...

  4. 【C#】为什么有可能会被多个线程修改的对象要加线程锁

    例1.不用线程锁的情况下,两个线程对同一个变量进行加减操作 static void Main(string[] args) { Counter counter = new Counter(); var ...

  5. C# 部分命名规则

    接触C#开发已经四个月,整理下C#中的命名规则: 一:变量的命名规则(和Java相似) 1.变量名由字母.数字.下划线组成 2.变量名开头只能以字母.下划线开头,不能以数字开头 3.区分大小写 4.命 ...

  6. 《Head First HTML与CSS》的CSS属性

    关于继承的结论. 1.元素选择器的作用强于继承的作用:用户定义强于浏览器默认(详见(3)<Head First HTML与CSS>学习笔记---CSS入门的2) 2.基于类的选择器> ...

  7. Mac上安装Homebrew和wget

    实际上是使用Homebrew来安装wget 安装Homebrew Homebrew一般称为brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常 ...

  8. 8.2.6 PEB —— PEB结构值不正确的问题

    书中作者使用 dt _PEB xxxxxx 命令来查看当前进程的PEB结构. 实际操作后PEB结构显示的成员值: 作为进程链表的LDR结构居然没有值,这显然是不正常的,地址也没有输错,问题到底出在哪里 ...

  9. hdu 3232 Crossing Rivers 过河(数学期望)

    题意:你在点A,目的地是点B,A和B的距离为D.中间隔了好多条河(所有河不会重叠),每条河有3个参数(P,L,V),其中P表示距离A点的长度,L表示河的长度,V表示河里的船的速度.假设每条河中仅有1条 ...

  10. umask命令

    umask——显示.设置文件的缺省权限 the user file-creation mask 命令所在路径:Shell内置命令 示例1:显示缺省权限 # umask -S 参数S的作用是以rwx形式 ...