您的位置:首页 > 其它

Codeforces Beta Round #76 (Div. 1 Only)

2013-03-17 17:05 330 查看
无聊和欧阳一起比赛。。。

才发现差距是巨大的, 欧阳的思维+编程的速度比我快了3倍左右。 也就是一般的题 我a了一题, 他就可以a 3题。

加油吧, 菜鸟。

a. 题意是简单的,但是情况稍微一点多。。。 注意这些情况就可以了

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
int x,y;
int x1,y1,x2,y2;
int n,m,a,b;
scanf("%d%d%d%d",&n,&m,&a,&b);
x=(a-1)/m;
y=(a-1)%m+1;

x1=(b-1)/m;
y1=(b-1)%m+1;

x2=(n-1)/m;
y2=(n-1)%m+1;
if(x==x1) printf("1");
else
{
if(b==n)
{
if(y==1) printf("1");
else printf("2");
return 0;
}
if(y==1)
{
if(b==n)
{
printf("1");
return 0;
}
if(y1==m) printf("1");
else printf("2");
return 0;
}
if(y1==m)
{
printf("2");
return 0;
}
if(y==y1+1)
{
printf("2");
}
else
{
if(x==x1-1) printf("2");
else
{
if(b==n)
{
if(y>y1) printf("3");
else printf("2");
}
else
printf("3");
}
}
}
return 0;
}


b. 一开始就被坑了, 以为是用网络流做的题(用网络比较难做),后面发现基本的贪心就可以解决, 从第一瓶开始倒,每次都尽量倒完,如果有一瓶需要倒到3或3个以上的杯子,则说明无解...

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

struct node
{
int id;
double w;
};

node g[55][55];
double h[55];

int main()
{
double n,w;
int m;
scanf("%lf%lf%d",&n,&w,&m);
for(int i=1;i<=n;i++)
h[i]=w;
memset(g,0,sizeof(g));
double tmp;
tmp=(n*w)/(double)m;
int cnt=1;
int flag=0;
for(int i=1;i<=m;i++)
{
if(flag>=2)
{
printf("NO");
return 0;
}
double sum=0;
int tcnt=0;
while( h[cnt]+sum < tmp-0.000001)
{
sum += h[cnt];
g[i][tcnt].id=cnt;
g[i][tcnt].w=h[cnt];
cnt++;
flag=0;
tcnt++;
}
if( h[cnt]+sum >= tmp -0.0000001&&h[cnt]+sum<=tmp+0.0000001)
{
g[i][tcnt].id=cnt;
g[i][tcnt].w=h[cnt];
flag=0;
cnt++;
}
else
{
g[i][tcnt].id = cnt;
g[i][tcnt].w = tmp-sum;
h[cnt] -= tmp-sum;
flag++;
}
}
printf("YES\n");
for(int i=1;i<=m;i++)
{
int j=0;
while(g[i][j].id!=0)
{
printf("%d %.6lf ",g[i][j].id,g[i][j].w);
j++;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: