2012ACM/ICPC杭州赛区网赛 —— F题

原本不想写这个解题报告的,觉得贪心的题没有必要写。。。(一直认为CF Div2里的前几题都是毁智商  好吧,像我这种弱菜也就混混div2 唉~)但是后来超哥来找我说这题有很多人的AC代码都有问题。。。。
然后就慌了。。。然后就决定在此 跪求各位神牛能掐掉我的代码!!!!
话说那数据真水的要命,当我在跟超哥讲我的代码的时候,我们有个地方起争执了,但是,最后我居然发现是我写错了。。。慌了,会不会是题目敲错+解法错误,结果错错得正,然后就A掉了。。。
还有就是那数据真的水的要死,我一个很明显的手误||||。。。只要数据中有一组有刀的人和没刀的人的人数相差有点大,然后最优解不是杀掉所有人,我当时比赛时AC的代码直接就挂掉了。。

说一下想法吧:
分两种情况:
第一种:
一个有刀的人我都不杀,这样贪心求出最优值anc,lefc两个值;
第二种:
我把所有有刀的人都杀掉,这样,剩下没有刀的人怎么办?比赛时,刚开始的想法就是剩下没刀的人按第一种的方法来杀。但是这样肯定是错的了!!!因为我交了好多次都没过- -||
当时就想到了多校时候碰到的一道矮子出坑的题目,所以,我就想能不能让那些杀掉有刀的人的“借来的刀”去替换我用自己的刀去杀那些没有刀的人。这样再贪心一下,就可以了。

当然我的想法不一定是对的 。。。。。至少我觉得可能有点漏洞~因为智商一直被认为是机房里最低。
#include
#include
#include
#include
using namespace std;
#define M 105000

struct node {
    int ai, bi;
} pnt[M];

struct Point {
    int ai;
} fnt[M];
int len, m;

bool cmp(node x, node y) {
    return x.ai < y.ai;
}

bool cfp(Point x, Point y) {
    return x.ai < y.ai;
}

int Max(int x, int y) {
    if (x < y) return y;
    return x;
}

int main() {
    int i, cas, n, casno = 0;
    scanf("%d", &cas);
    while (cas--) {
        scanf("%d%d", &n, &m);
        int sum = 0, pos = -1, minn = m + 1;
        int cnth = 0;
        len = 0;
        for (i = 0; i < n; i++) {
            scanf("%d%d", &pnt[len].ai, &pnt[len].bi);
            fnt[i].ai = pnt[len].ai;
            sum += pnt[len].bi;
            if (pnt[len].bi > 0 && pnt[len].ai < minn) {
                minn = pnt[len].ai;
                pos = 0;
            }
            if (pnt[len].bi != 0) {
                cnth++;
                len--;
            }
            len++;
        }
        if (sum > 0) {
            sum -= cnth - 1;
        }
        sort(pnt, pnt + len, cmp);
        sort(fnt, fnt + n, cfp);
        int anc = 0, lefc, left, ans = 0;
        lefc = m;
        for (i = 0; i < len; i++) {//do not kill the dao
            if (pnt[i].ai <= lefc) {
                anc++;
                lefc -= pnt[i].ai;
            }
        }
        if (m >= minn) {//kill the dao first
            left = m - minn;
            ans = n;
            for (i = 0; i < len - sum; i++) {
                if (left >= fnt[i].ai) {
                    if (minn == fnt[i].ai) {
                        minn = -1;
                        len++;
                        continue;
                    }
                    left -= fnt[i].ai;
                } else {
                    ans--;
                }
            }
            if (ans == anc) {
                lefc = Max(left, lefc);
            } else {
                if (ans > anc) {
                    anc = ans;
                    lefc = left;
                }
            }
        }

        printf("Case %d: %d %d\n", ++casno, anc, m - lefc);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值