CJ 9.14 test

*爱你&永不变心* 提交于 2019-11-29 14:00:22

题面1JZMwl10Z1zyD7QxkSKpRfw evy3
10+20+100
本来能AK的,结果搞成这个鬼样子,真的气啊

Alice和Bob的游戏game

如果质因子个数为\(2\)就Bob胜,否则Alice胜,显然。
结论推错了直接100->10。

#include<bits/stdc++.h>
#define LL long long
using namespace std;
int main()
{
    freopen("game.in","r",stdin),freopen("game.out","w",stdout);
    int T,num;LL n,i;
    for(scanf("%d",&T);T;--T)
    {
    scanf("%lld",&n),num=0;
    for(i=2;i*i<=n;++i)
        if(n==1) break;
        else while(!(n%i)) n/=i,++num;
    if(n^1) ++num;
    puts(num^2? "Alice":"Bob");
    }
    return 0;
}

灭鲲kun

我们把鲲降序排序,把视频按\(d\)降序排序。
然后扫鲲,把所有能消灭它的视频放进一个优先队列,优先队列按\(c\)升序排序,然后把堆顶取出计算答案。
若堆空则无解。
\(m\)打成$n$100->20。

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=1000007;
int a[N];
struct node{int d,c;}t[N];
int operator<(node a,node b){return a.d>b.d;}
int operator>(node a,node b){return a.c>b.c;}
priority_queue<node,vector<node>,greater<node> >q;
int read(){int x=0;char c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
int main()
{
    freopen("kun.in","r",stdin),freopen("kun.out","w",stdout);
    int n=read(),m=read(),i,top;LL ans=0;
    for(i=1;i<=n;++i) a[i]=read();
    for(i=1;i<=m;++i) t[i].d=read(),t[i].c=read();
    sort(a+1,a+n+1),sort(t+1,t+m+1);
    for(i=n,top=1;i;--i)
    {
    while(t[top].d>=a[i]) q.push(t[top]),++top;
    if(!q.empty()) ans+=q.top().c,q.pop();
    else return !printf("JiNiTaiMei!");
    }
    return !printf("%lld",ans);
}

运河计划canal

这题的idea非常的妙。
一个显然的结论:我们设红点\(i\)对应蓝点\(p_i\)(排序后),显然\(p_i=i\),否则会有交。
如果没有障碍点,两个点之间的路径数\(num(i,j)=C(x_i-x_j+y_i-y_j,x_i-x_j)\)。(假设\(j\)\(i\)左上方)
再考虑障碍点,设从红点\(i\)到障碍点\(j\)且途中不经过其他点的方案数\(d_j\),利用容斥,枚举每个在\(i\)\(j\)组成的矩形中的点(实际上可以直接先按\(y\)再按\(x\)排序,枚举时枚举前面的点,\(x\)坐标大于的话可在计算\(num(i,j)\)的式子中判成\(0\)),\(d_j=num(i,j)-\sum\limits_{k=1}^{j-1}d_knum(k,j)\)
对于每个红点和障碍点计算出\(d\),那么我们就可以计算出红点\(i\)到蓝点\(j\)的方案书\(f_{i,j}\)
然后考虑去掉交叉路径的影响,利用容斥,有两条路径相交的要减去,有三条路径相交的要加上...
也就是偶数减去奇数加上,实际上就是\(p\)的逆序对偶数加上奇数减去。
然后我们把这个式子写出来(\(s(p)\)表示\(p\)的逆序对数)\(\sum\limits_p(-1)^{s(p)}\prod_{i=1}^nf_{i,p_i}\)
可以发现这就是行列式的定义。直接计算即可。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!