UVa10123 No Tipping

简介: UVa10123 No Tipping
#include <stdio.h>#include <string.h>intL, M, N, find;
intC, lenl, lenr;
structnode{
intl, w;
} left[30], right[30], res[30];
intis_ok(intl, intr)
{
intlsum=0, rsum=0;
inti;
for (i=0; i<l; i++)
    {
lsum+= (-left[i].l*2-3) *left[i].w;
    }
for (i=0; i<r; i++)
    {
rsum+= (right[i].l*2+3) *right[i].w;
    }
rsum+=C;
if (lsum>rsum) return0;
lsum=0, rsum=0;
for (i=0; i<l; i++)
    {
lsum+= (-left[i].l*2+3) *left[i].w;
    }
for (i=0; i<r; i++)
    {
rsum+= (right[i].l*2-3) *right[i].w;
    }
lsum+=C;
if (rsum>lsum) return0;
return1;
}
voiddfs(intcur, intl, intr)
{
inti;
if (cur==N)
    {
for (i=cur-1; i>=0; i--)
printf("%d %d\n", res[i].l, res[i].w);
find=1;
return;
    }
for (i=l; i<lenl; i++)
    {
if (is_ok(i, r) &&!find)
        {
res[cur].l=left[i].l;
res[cur].w=left[i].w;
dfs(cur+1, i+1, r);
        }
elsebreak;
    }
for (i=r; i<lenr; i++)
    {
if (is_ok(l, i) &&!find)
        {
res[cur].l=right[i].l;
res[cur].w=right[i].w;
dfs(cur+1, l, i+1);
        }
elsebreak;
    }
}
intmain()
{
#ifndef ONLINE_JUDGEfreopen("d:\\UVa\\uva_in.txt", "r", stdin);
#endifintcas=1;
inti, j;
intu, v;
structnodetem;
while (scanf("%d%d%d", &L, &M, &N) &&L+M+N)
    {
lenl=lenr=0;
for (i=0; i<N; i++)
        {
scanf("%d%d", &u, &v);
if (u<0)
            {
left[lenl].l=u;
left[lenl++].w=v;
            }
else            {
right[lenr].l=u;
right[lenr++].w=v;
            }
        }
for (i=1; i<lenl; i++)
        {
for (j=0; j<lenl-i; j++)
            {
if ((-left[j].l*2-3) *left[j].w> (-left[j+1].l*2-3) *left[j+1].w)
                {
tem=left[j];
left[j] =left[j+1];
left[j+1] =tem;
                }
            }
        }
for (i=1; i<lenr; i++)
        {
for (j=0; j<lenr-i; j++)
            {
if ((right[j].l*2-3) *right[j].w> (right[j+1].l*2-3) *right[j+1].w)
                {
tem=right[j];
right[j] =right[j+1];
right[j+1] =tem;
                }
            }
        }
C=3*M;
printf("Case %d:\n", cas++);
find=0;
dfs(0, 0, 0);
if (!find) printf("Impossible\n");
    }
return0;
}
目录
相关文章
Uva10001 Garden of Eden
Uva10001 Garden of Eden
47 0
UVa11968 - In The Airport
UVa11968 - In The Airport
58 0
UVa 10082 WERTYU
UVa 10082 WERTYU
129 0
uva 11806 - Cheerleaders
点击打开链接 题意:在一个n行m列的矩形里面放k个相同的石子,要求第一行,最后一行,第一列,最后一列都要有石子。问有几种方法? 思路: 1 如果题目没有要求“第一行,最后一行,第一列,最后一列都要有石子”,那么答案就是C[n*m][k],我们用C[i][j]表示i个里面选择j个的组合数。
823 0
uva 10273 Eat or Not to Eat?
点击打开链接uva 10273 思路: 暴力求解 分析: 1 题目要求没有吃掉的奶牛的个数已经最后一次吃掉奶牛的天数 2 没有其它的方法只能暴力,对于n头牛的n个周期求最小公倍数,然后在2个公倍数之内暴力求解 代码: #inclu...
830 0
|
C++
uva 11136 Hoax or what
点击打开链接uva 11136 思路: STL 分析: 1 题目意思比较不好理解,理解了题目之后我们可以利用STL的multiset来做 2 每次找到最大和最小的值,然后求解即可 代码: #include #include #in...
846 0
uva 1394 - And Then There Was One
点击打开链接uva 1394 思路: 数学递推 分析: 1 题目是一道变形的约瑟夫环变形问题 2 网上看到一篇很好的数学递推法 问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。
995 0
uva 10730 - Antiarithmetic?
点击打开链接uva 10730 思路:枚举等差中项 分析: 1 给定一个n个数的序列判断是否有等差子序列 2 很明显我们如果要判断是否有等差子序列的话,只要去判断是否有长度为3的等差子序列 3 对于n
846 0
|
人工智能
uva 11300 - Spreading the Wealth
点击打开链接uva 11300 思路:数学分析+贪心 分析: 1 首先最终每个人的金币数量可以计算出来,它等于金币总数除以人数n。接下来我们用m来表示每人的最终的金币数 2 现在假设编号为i的人初始化为Ai枚金币,Xi表示第i个人给第i-1个人Xi枚金币,对于第一个人来说他是给第n个人。
864 0