BZOJ4735: 你的生命已如风中残烛

我先打了个暴力dfs 输出所有方案

发现看不懂

先不考虑普通卡的排列 然后求出答案 最后乘上 (n-m)!

然后再打一个暴力 dfs输出所有方案(雾)

然后找规律呗

我随便输入了几组数据

1 4       -> 5  = 5

1 5     -> 6  = 6

1 4 5    -> 90 = 9 * 10

2 4 5    -> 110 = 10 * 11

3 4 5    -> 132 = 11 * 12

1 3 6    -> 90 = 9 * 10

1 1 3 5 ->  720 = 8 * 9 * 10

发现好像当n相同时,答案只和 m有关 和wi无关

然后就找到规律了

233333333

tans = m*(m-1)*(m-2)...*(m-n+1)

然后ans = tans*(n-m)!

就好了

仔细看一下 答案好像是某种组合数 反正我推不出来

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define For(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
const int  P = 998244353;
int n,m;
int w[45];
long long res;
bool vis[45];
int ans[1000];
void dfs(int step,int farest){
    if(step==farest+1)return;
    if(step==m+1){
        For(i,1,step-1){
            printf("%d ",ans[i]);
        }
        puts("");
        res++;return;
    }
//  ans[step]=0;dfs(step+1,farest);
    For(i,1,m){
        if(vis[i])continue;
        vis[i]=1;
        ans[step]=w[i];
        dfs(step+1,farest+w[i]);
        vis[i]=0;
    }
}
void brute_work(){
    if(n==0){puts("0");return;}
    For(i,1,n) m+=w[i];
    if(m==0){puts("0");return;}
//  dfs(1,1);
//  cout<<res<<endl;
    res=1;
    For(i,2,n)
        res=(1ll*res*(m-i+2))%P;
    For(i,1,m-n) res=(1ll*res*i)%P;
    printf("%lld",res);return;
}
int main()
{
    cin>>n;
    For(i,1,n)scanf("%d",&w[i]);
    brute_work();
    return 0;
}
时间: 2024-10-10 05:12:21

BZOJ4735: 你的生命已如风中残烛的相关文章

【UOJ】#273. 【清华集训2016】你的生命已如风中残烛

题目链接:http://uoj.ac/problem/273 $${Ans=\frac{\prod _{i=1}^{m}i}{w-n+1}}$$ 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8

UOJ273 [清华集训2016] 你的生命已如风中残烛 【数学】

题目分析: 把$0$卡牌看成$-1$.题目要求前缀和始终大于等于$1$. 最后添加一个$-1$,这样除了最后一位之外大于等于1,最后一位等于0. 构造圆排列.这样的话一个圆排列只有一个满足的情况,然后考虑我们多出了一个$-1$,所以除去. 代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 45; 5 const int mod = 998244353; 6 7 int n,m; 8 int a[m

uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)

传送门 一道打表题 我们把那些普通牌的位置看成\(-1\),那么就是要求有多少个排列满足前缀和大于等于\(1\) 考虑在最后放一个\(-1\),那么就是除了\(m+1\)的位置前缀和都要大于等于\(1\) \(m+1\)个数的圆排列的方案数为\(m!\),然后对于每一个圆排列,肯定存在一个前缀和最小且最右边的位置,那么它后面的所有位置肯定前缀和都大于等于\(1\),而对于这个位置如果不把它放最后肯定会有前缀和小于\(1\) 所以对于每一种圆排列有且仅有一种摆放方式合法 然而此时最后的这个\(-1

她的生命已不只属于自己,还属于那些爱她的人

一 一个年轻人跳河自尽,被一个中年人救起. 年轻人醒来时,中年人对他说,如果你死了,就是你一个人死了吗? 年轻人说,他家里没有背景,他靠自己打拼,成就了一番事业,拥有了一份丰厚的家产,可因一次投资失误,他一夜之间赔进了所有的家产,变得一无所有,这时,他感到世界是那么大,而自己是那么渺小,那么无助.无能和无力,就这样,他想到了死. 中年人问,在你想到死的时候,你想到过爱你的人吗? 年轻人说,他家还有母亲,还有一位深深爱着他的母亲,是啊,如果自己死了,母亲怎么办呢? 中年人接着年轻人的话说,一个人对

ZJOI2018游记

省选讲课: 题目都很经典,给讲题人点赞!(只是有时候讲的太快了,没有留足够的思考时间qaq) ZJOI RP++ Day1: 一进考场就趴在了桌上,,太困了.后悔自己前一天熬夜. 密码错误,无法解压?全场选手都遇到这个问题 于是延迟15分钟开始.(兴奋不已,我又可以多睡十五分钟了233) T1. 多次求线图,求点数?? 这道题的题型感觉非常新颖,感觉是一道要挖掘性质的题.一定是道好题 好难啊,不会做怎么办办.. k=2似乎很可做.. k=3似乎也很可做 k=4麻烦一点,似乎也可做 k=5是不是在

第二十一篇 生命的全景

第二十一篇  生命的全景 生命对于我们来讲非常的熟悉,我们身边就有形形色色的生命,我们所生活的这个空间就是生命的空间.然而,就是我们习以为常的生命,却蕴含着极其广泛的意义和无穷的奥秘.就目前我们在宇宙中的能力而言,还无法做到站在生命空间之上的高度去总览全局,还无法对生命进行全面地概括与剖析. 如今,凭我们小宇宙家族现阶段的能力,还没有办法了解生命全部的奥秘,但是,随着我们对生命的不断探索,会有越来越多的生命奥秘被我们认知. 虽说我们对生命的了解还很有局限,但是我们目前的认知水平已经可以探知到:生

七夕许愿

我将搬新住处,窗前种下花草.搬个桌子靠窗前,安静写下文字和程序.愿永生沉醉其中,与世隔绝亦于心无碍.心爱的人啊,我从未有所保留,虽是个 Plain 'Boy,也有着热忱的心思和信念:回首已忘来处,前眺不知归途,生命已入初夏,心沉入寂静之路,年年的春秋冬夏依然绚丽芬芳,美丽如初,纵使短暂.自然的美啊,心愿同一起去了.更爱七夕的传说,所有爱着和被爱的人都会受到仙女的祝福.

希望,所有珍惜都不需要靠失去才懂得

哲人说,在我们追求和等待的那时,生命已不知不觉地偷渡过去.一个不会欣赏自己的人,往往难有快乐的情绪.你记住也好,我忘了也罢,生命本是一场来去轮回的旋转.何曾有挥洒绝笔的停歇,依旧是风花雪月的演剧.人都静了,夜已深了,云也散了,酒也醒了.人生的幸运和不幸,都是过去,都是曾经. (你能用"我不理你了"威胁一个人那么这个人一定非常爱你) 人的一生注定遇到两种人,一个惊艳了时光,一个温柔了岁月.有一些人,注定这一辈子都不会在一起,但是有一种感觉却可以藏在心里一辈子.无理取闹的年龄过了,沉默就是

Delphi 的接口机制——接口操作的编译器实现过程(1)

学习COM编程技术也快有半个月了,这期间看了很多资料和别人的程序源码,也尝试了用delphi.C++.C#编写COM程序,个人感觉Delphi是最好上手的.C++的模版生成的代码太过复杂繁琐,大量使用编译宏替代函数代码,让初学者知其然而不知其所以然:C#封装过度,COM编程注定是要与操作系统频繁打交道的,需要调用大量API函数和使用大量系统预定义的常量与类型(结构体),这些在C#中都需手工声明,不够简便:Delphi就简单多了,通过模版创建的工程代码关系结构非常清晰,而且其能非常容易使用API函