题目链接:http://codeforces.com/problemset/problem/141/B
题意:在一个坐标中,如图放置箱子,每个箱子的分数如图,然后给你一个坐标,问能得多少分
思路:直接模拟过程就好了,注意边界的处理
ac代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#define MAXN 1010000
#define LL long long
#define ll __int64
#define INF 0xfffffff
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-8
using namespace std;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
double dpow(double a,ll b){double ans=1.0;while(b){if(b%2)ans=ans*a;a=a*a;b/=2;}return ans;}
//head
int main()
{
int a,x,y;
while(scanf("%d%d%d",&a,&x,&y)!=EOF)
{
if(y<0)
printf("-1\n");
else if(y<=a&&y>=0)
{
double b=a*1.0/2.0;
double c=x*1.0;
if(y==0||y==a)
printf("-1\n");
else if(c>-b&&c<b)
printf("1\n");
else
printf("-1\n");
}
else
{
y-=a;
int val=2,n=1;
while(y>a)
{
if(n%2)
val++;
else
val+=2;
n++;
y-=a;
}
if(y==a)
printf("-1\n");
else
{
// cout<<val<<endl;
if(val%3==0)
{
if(x==0)
printf("-1\n");
else if(x>-a&&x<0)
printf("%d\n",val);
else if(x>0&&x<a)
printf("%d\n",val+1);
else
printf("-1\n");
}
else
{
double b=a*1.0/2.0;
double c=x*1.0;
if(c>-b&&c<b)
printf("%d\n",val);
else
printf("-1\n");
}
}
}
}
return 0;
}