多校第一场 费马小定理+模拟+组合数学

A题:Couple doubi

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4861

这题逗逼了,刚開始根本就没什么思路,刚開始看题的时候有点像费马小定理,可是这个定理我仅仅知道。然后没用过。

看了下定义,有点不一样的是反着的。然后反着的我又不会转化。尼玛,就这样错过了最好的解题方法。然后队友又理解错题意了。

WA了多发,然后我又一次看了下题意。然后队友才发觉理解错题意了。然后找了规律才A。

代码比較短,就不贴了,真的写吧。

if(k/(p-1)&1) puts("YES");
else puts("NO");

D题:  Task

链接:http://acm.hdu.edu.cn/showproblem.php?

pid=4864

这题刚開始想的时候想对了。

就是把机器和任务放到同一个数组里,然后依据时间和等级从大到小排序。可是时间知道怎么取。可是等级的时候就不太知道了。所以不太敢敲。也不知道怎么处理那些时间都大,然后等级也大的时候取哪个。

然后……然后刚刚知道怎么处理,可是又T了。看了琦神的,用multiset处理真是太机智了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<bitset>
#define INF 100007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
struct abc
{
    int ti,le,ty;
}a[200005];
bool cmp(abc a,abc b)
{
    if(a.ti!=b.ti) return a.ti>b.ti;
    if(a.le!=b.le) return a.le>b.le;
    return a.ty>b.ty;
}
multiset<int>s;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int i,j,cnt=0;
        ll sum=0,sum1=0;
        s.clear();
        for(i=0;i<n;i++)
            scanf("%d%d",&a[cnt].ti,&a[cnt].le),
            a[cnt++].ty=1;
        for(i=0;i<m;i++)
            scanf("%d%d",&a[cnt].ti,&a[cnt].le),
            a[cnt++].ty=0;
        sort(a,a+cnt,cmp);
        for(i=0;i<cnt;i++)
        {
            if(a[i].ty) s.insert(a[i].le);
            else
            {
                multiset<int>::iterator it=s.lower_bound(a[i].le);
                if(it!=s.end())
                    sum1++,sum+=500*a[i].ti+2*a[i].le,s.erase(it);
            }
        }
        printf("%I64d %I64d\n",sum1,sum);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值