题目链接:https://ac.nowcoder.com/acm/contest/223/B

题目大意:

小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为1,2,…N1,2,…N,同时小b也想出去游玩。由于一些特殊♂原因,他们的旅行计划必须满足一些条件
首先,他们可以从这N个景点中任意选几个游玩
设小a选出的景点集合为A,小b选的景点集合为B,则需要满足
1. A,B的交集不能为空集
2. A,B不能相互包含(A=B也属于相互包含)
注意:在这里我们认为(A,B)是无序的,即(A,B)和(B,A)是同一种方案。
具体思路:暴力打表,然后把前15项放进BM里,然后就A了?
打表代码:

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 # define ll long long
  4 const int maxn = 2e5  + 100;
  5 const int N  = 100;
  6 ll n;
  7 map<vector<ll>,bool>vis;
  8 map<pair<vector<ll>,vector<ll>>,bool >vis2;
  9 map<int,int>bao;
 10 bool judge(vector<ll>q1,vector<ll>q2)
 11 {
 12     int flag=1;
 13     if(q1==q2)
 14         return false;
 15     bao.clear();
 16     for(int i=0; i<q1.size(); i++)
 17     {
 18         bao[q1[i]]=1;
 19     }
 20     for(int i=0; i<q1.size(); i++)
 21     {
 22         for(int j=0; j<q2.size(); j++)
 23         {
 24             if(q1[i]==q2[j])
 25             {
 26                 flag=0;
 27                 break;
 28             }
 29         }
 30         if(!flag)
 31             break;
 32     }
 33     if(flag)
 34         return false;
 35     int num=0;
 36     for(int i=0; i<q2.size(); i++)
 37     {
 38         if(bao[q2[i]])
 39             num++;
 40     }
 41     if(num==q2.size())
 42         return false;
 43     bao.clear();
 44     for(int i=0; i<q2.size(); i++)
 45     {
 46         bao[q2[i]]=1;
 47     }
 48     num=0;
 49     for(int i=0; i<q1.size(); i++)
 50     {
 51         if(bao[q1[i]])
 52             num++;
 53     }
 54     if(num==q1.size())
 55         return false;
 56     return true;
 57 }
 58 vector<ll>q1;
 59 vector<ll>q2;
 60 bool check(ll tmp1,ll tmp2)
 61 {
 62     q1.clear();
 63     q2.clear();
 64     for(ll i=0; i<n; i++)
 65     {
 66         if((1ll<<i)&tmp1)
 67             q1.push_back(i);
 68     }
 69     for(ll i=0; i<n; i++)
 70     {
 71         if((1ll<<i)&tmp2)
 72             q2.push_back(i);
 73     }
 74     sort(q1.begin(),q1.end());
 75     sort(q2.begin(),q2.end());
 76     if(judge(q1,q2))
 77         return true;
 78     return false;
 79 }
 80 ll cal(ll n)
 81 {
 82     ll maxstate=(1ll<<n)-1;
 83     ll sum=0;
 84     for(ll i=0; i<=maxstate; i++)
 85     {
 86         for(ll j=0; j<=maxstate; j++)
 87         {
 88             if(check(i,j)&&vis2[make_pair(q1,q2)]==0)
 89             {
 90                 vis2[make_pair(q1,q2)]=1;
 91                 vis2[make_pair(q2,q1)]=1;
 92                 sum++;
 93             }
 94         }
 95     }
 96     return sum;
 97 }
 98 int main()
 99 {
100     //   freopen("hqx.out","w",stdout);
101     //scanf("%d",&n);
102     for(ll i=1; i<=10; i++)
103     {
104         n=i;
105         vis.clear();
106         vis2.clear();
107         printf("%lld ",cal(n));
108     }
109
110     return 0;
111 }

很黄,很暴力

BM模板:

  1 #include <bits/stdc++.h>
  2
  3 using namespace std;
  4 #define rep(i,a,n) for (long long i=a;i<n;i++)
  5 #define per(i,a,n) for (long long i=n-1;i>=a;i--)
  6 #define pb push_back
  7 #define mp make_pair
  8 #define all(x) (x).begin(),(x).end()
  9 #define fi first
 10 #define se second
 11 #define SZ(x) ((long long)(x).size())
 12 typedef vector<long long> VI;
 13 typedef long long ll;
 14 typedef pair<long long,long long> PII;
 15 const ll mod=1e8+7;
 16 ll powmod(ll a,ll b)
 17 {
 18     ll res=1;
 19     a%=mod;
 20     assert(b>=0);
 21     for(; b; b>>=1)
 22     {
 23         if(b&1)
 24             res=res*a%mod;
 25         a=a*a%mod;
 26     }
 27     return res;
 28 }
 29 // head
 30
 31 long long _,n;
 32 namespace linear_seq
 33 {
 34 const long long N=10010;
 35 ll res[N],base[N],_c[N],_md[N];
 36
 37 vector<long long> Md;
 38 void mul(ll *a,ll *b,long long k)
 39 {
 40     rep(i,0,k+k) _c[i]=0;
 41     rep(i,0,k) if (a[i])
 42         rep(j,0,k)
 43         _c[i+j]=(_c[i+j]+a[i]*b[j])%mod;
 44     for (long long i=k+k-1; i>=k; i--)
 45         if (_c[i])
 46             rep(j,0,SZ(Md)) _c[i-k+Md[j]]=(_c[i-k+Md[j]]-_c[i]*_md[Md[j]])%mod;
 47     rep(i,0,k) a[i]=_c[i];
 48 }
 49 long long solve(ll n,VI a,VI b)
 50 {
 51     // a 系数 b 初值 b[n+1]=a[0]*b[n]+...
 52 //        printf("%d\n",SZ(b));
 53     ll ans=0,pnt=0;
 54     long long k=SZ(a);
 55     assert(SZ(a)==SZ(b));
 56     rep(i,0,k) _md[k-1-i]=-a[i];
 57     _md[k]=1;
 58     Md.clear();
 59     rep(i,0,k) if (_md[i]!=0)
 60         Md.push_back(i);
 61     rep(i,0,k) res[i]=base[i]=0;
 62     res[0]=1;
 63     while ((1ll<<pnt)<=n)
 64         pnt++;
 65     for (long long p=pnt; p>=0; p--)
 66     {
 67         mul(res,res,k);
 68         if ((n>>p)&1)
 69         {
 70             for (long long i=k-1; i>=0; i--)
 71                 res[i+1]=res[i];
 72             res[0]=0;
 73             rep(j,0,SZ(Md)) res[Md[j]]=(res[Md[j]]-res[k]*_md[Md[j]])%mod;
 74         }
 75     }
 76     rep(i,0,k) ans=(ans+res[i]*b[i])%mod;
 77     if (ans<0)
 78         ans+=mod;
 79     return ans;
 80 }
 81 VI BM(VI s)
 82 {
 83     VI C(1,1),B(1,1);
 84     long long L=0,m=1,b=1;
 85     rep(n,0,SZ(s))
 86     {
 87         ll d=0;
 88         rep(i,0,L+1) d=(d+(ll)C[i]*s[n-i])%mod;
 89         if (d==0)
 90             ++m;
 91         else if (2*L<=n)
 92         {
 93             VI T=C;
 94             ll c=mod-d*powmod(b,mod-2)%mod;
 95             while (SZ(C)<SZ(B)+m)
 96                 C.pb(0);
 97             rep(i,0,SZ(B)) C[i+m]=(C[i+m]+c*B[i])%mod;
 98             L=n+1-L;
 99             B=T;
100             b=d;
101             m=1;
102         }
103         else
104         {
105             ll c=mod-d*powmod(b,mod-2)%mod;
106             while (SZ(C)<SZ(B)+m)
107                 C.pb(0);
108             rep(i,0,SZ(B)) C[i+m]=(C[i+m]+c*B[i])%mod;
109             ++m;
110         }
111     }
112     return C;
113 }
114 long long gao(VI a,ll n)
115 {
116     VI c=BM(a);
117     c.erase(c.begin());
118     rep(i,0,SZ(c)) c[i]=(mod-c[i])%mod;
119     return solve(n,c,VI(a.begin(),a.begin()+SZ(c)));
120 }
121 };
122
123 int main()
124 {
125     scanf("%lld", &n);
126     printf("%lld\n",linear_seq::gao(VI{0,0,3,30,195,1050,5103,23310,102315,437250},n-1));
127 }

View Code

转载于:https://www.cnblogs.com/letlifestop/p/10836859.html

小a的旅行计划(BM模板)相关推荐

  1. 牛客ACM赛 B [小a的旅行计划 ]

    链接 B 小a的旅行计划 把\(n\)个数中选任意数分成\(a,b\)两个集合,集合无区别,要求不包含且有交,求方案数.\(n\leq 10^{13}\) 首先讨论\(a,b\)并集是否为全集: 若是 ...

  2. [usOJ5528]小奇的旅行计划

    题目 传送门 题目描述 小奇所在的国家一共由nnn个城市和mmm条连接这些城市的双向道路组成. 小奇非常喜欢骑自行车,它常常骑着自行车从一个城市,沿着某些双向道路到达另一个城市. 现在,这个国家要关闭 ...

  3. 从零开始学微信小程序开发:6 旅行计划调查

    小程序对HTML5表单及表单元素进行了封装,提供了丰富的表单组件. 6.1 用form组件收集信息 form(表单)也是前端视图层与后端服务层交互过程中最重要的信息来源. 小程序的form组件具有一些 ...

  4. 【拓扑排序】【DP】旅行计划(luogu 1137)

    旅行计划 luogu 1137 题目大意: 有一堆点,之间连接着一些边(有向),保证无环,现在要求出从任意地方出发到所有点的最长路(出发点不一定相同) 原题: 题目描述 小明要去一个国家旅游.这个国家 ...

  5. 51nod 1273 旅行计划——思维题

    某个国家有N个城市,编号0 至 N-1,他们之间用N - 1条道路连接,道路是双向行驶的,沿着道路你可以到达任何一个城市.你有一个旅行计划,这个计划是从编号K的城市出发,每天到达一个你没有去过的城市, ...

  6. 个别化教育计划IEP模板

    个别化教育计划IEP模板 一.基本信息 学生姓名: 性 别: 出生日期: 照 片: 年 龄: 障碍类别: 障碍程度: 年 级: 智商(IQ): 家庭住址: 入学时间: 家长 / 监护人信息: 姓 名: ...

  7. 动态规划+vector解旅行计划问题

    动态规划+vector解旅行计划问题 题目描述 小明要去一个国家旅游.这个国家有#N个城市,编号为1至N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最 ...

  8. 微立体个人年终总结计划PPT模板

    PPT介绍 一份高质量的PPT模板,可以帮助你在日常的工作里节省时间,还能提高工作效率.去赢得更多机会,今天小编分享一份精美的微立体个人年终总结计划PPT模板 PPT模板名称:微立体个人年终总结计划P ...

  9. IOS风工作总结计划PPT模板

    模板介绍 一份高质量的PPT模板,可以让你在日常的工作中展示自我.脱颖而出.去赢得更多机会,今天小编分享一份精美的IOS风工作总结计划PPT模板 PPT模板名称:IOS风工作总结计划PPT模板,模板编 ...

  10. 【洛谷】P1137旅行计划

    [洛谷]P1137旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1至N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市 ...

最新文章

  1. 计算机视觉系统学习书籍/综述汇总
  2. BZOJ 3101: N皇后 构造
  3. Flutter 1.17 | 2020 首个稳定版发布!
  4. SAP Fiori 应用 My Appointment - Belonging to me, Search by team, Search by group
  5. PDH光端机常见故障问题解决方法
  6. Java移位操作小测试
  7. iPhone Instruments工具使用_检测内存泄露(转)
  8. 一个优秀的 Node.js 开发者
  9. 送给创业的朋友:落入坑洞的猎人
  10. HeadFirstJava——6_Java API
  11. smartsvn 忽略文件夹_SmartSVN设置忽略文件类型设置上传.a文件
  12. 淘宝万能抢单exe,含python源码
  13. The name `AssetDatabase' does not exist in the current context
  14. userland免root运行linux,UserLAnd(GNU/Linux安装)
  15. A1、A2、A3、A4纸都是多大尺寸
  16. eureka服务返回的数据是xml格式
  17. 【一篇文章告诉你网格策略从理论到实盘的所有内容(python实现)】
  18. 数据分析---2.数据分析----爬取NBA中国官方网站的球员数据,并分析
  19. 【Python计量】DID模型构建
  20. PT2050(TWS 蓝牙耳机二合一触摸 IC)

热门文章

  1. 泛型:泛型类与泛型方法
  2. vue 刮刮乐抽奖H5项目
  3. ppt 母版的设置(一篇看懂)
  4. 关于NX UG11.0在visual studio中不能创建模板的问题
  5. jeeplus框架简介
  6. C#嵌入谷歌浏览器内核
  7. 临床实验中关于 T 检验的应用与解释
  8. SPSS作业-方差分析-双因素分析
  9. 苹果CMS-v10系统标签
  10. html 样式 tab键 空格,设置Visual Studio2013的TAB键为4个空格