20170125小测
今天又是例行考试的说。
话说我今天loj大凶且忌参加模拟赛,洛谷也好不到哪去,怕不是要爆零了QAQ。
T1:卡片游戏:
这题看到数据范围1e5,铁定不是费用流了。
这种东西显然不可能是dp,看看怎么贪心?
首先,我们如果给一张卡片负号,则一定去较大的那个值,正号则取较小的那个。
两边的差值是大小两值的和。
所以,我们先贪心地给负号,并把卡片放进一个堆里,如果堆已满且堆顶的数值和小于当前卡片的数值和,那么我们弹出堆顶,放入当前卡片。
考虑一正一负且负数的绝对值大的情况,也能通过。
写了拍了没啥问题,就这样了。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<set> 6 #define debug cout 7 using namespace std; 8 const int maxn=1e5+1e2; 9 10 struct Node { 11 int mx,mi; 12 friend bool operator < (const Node &a,const Node &b) { 13 return a.mx + a.mi < b.mx + b.mi; 14 } 15 }ns[maxn]; 16 17 multiset<Node> heap; 18 19 int main() { 20 static int n,lim,ans; 21 scanf("%d",&n) , lim = n >> 1; 22 for(int i=1;i<=n;i++) { 23 scanf("%d%d",&ns[i].mx,&ns[i].mi); 24 if( ns[i].mx < ns[i].mi ) 25 swap(ns[i].mx,ns[i].mi); 26 } 27 for(int i=1;i<=n;i++) { 28 if( heap.size() < lim ) { 29 heap.insert(ns[i]); 30 ans -= ns[i].mx; 31 } else if( *heap.begin() < ns[i] ) { 32 Node b = *heap.begin(); 33 heap.erase(heap.begin()); 34 ans += b.mx , ans += b.mi; 35 heap.insert(ns[i]); 36 ans -= ns[i].mx; 37 } else ans += ns[i].mi; 38 } 39 40 printf("%d\n",ans); 41 42 return 0; 43 }
View Code
T2:nimgame:
nim游戏?xor?随机方案?不可做不可做,敲了n!暴力走人。
然后爆零了...…
正解是NTT,首先第一问如果不是全1则一定为1/2(归纳法易证,有空再补,Fedora输入法反人类!),
第二问就是奇数次取完的方案数,如果我们算出k次取完每一个的数量,那么答案就是个卷积,指数生成函数启发式NTT即可。
爆零爆搜代码:
1 #pragma GCC optimize(3) 2 #pragma GCC optimize("-funsafe-loop-optimizations") 3 #pragma GCC optimize("-funroll-loops") 4 #pragma GCC optimize("-fwhole-program") 5 #pragma GCC target("mmx") 6 #include<cstdio> 7 #define lli long long int 8 #define debug cout 9 using namespace std; 10 const int maxn=1e2+1e1; 11 const int mod = 2013265921; 12 13 int in[maxn],n; 14 struct Node { 15 lli exp; 16 int way,full; 17 }; 18 inline lli rev(int base) { 19 int tme = mod - 2; 20 lli ret = 1 , now = base; 21 while( tme ) { 22 if( tme & 1 ) ret = ret * now % mod; 23 now = now * now % mod; 24 tme >>= 1; 25 } 26 return ret; 27 } 28 29 inline bool empty() { 30 for(int i=1;i<=n;i++) 31 if( in[i] ) return 0; 32 return 1; 33 } 34 Node dfs() { 35 if( empty() ) 36 return (Node){0,0,1}; 37 Node ret = (Node){0,0,0}; 38 int ways = 0 , full = 0; 39 for(int i=1;i<=n;i++) 40 if( in[i] ) 41 for(int j=1;j<=in[i];j++) { 42 in[i] -= j; 43 ++ways; 44 Node nxt = dfs(); 45 ret.exp += ( 1 - nxt.exp + mod ) % mod , ret.exp %= mod , ret.way += nxt.way , full += nxt.full; 46 in[i] += j; 47 } 48 ret.exp = ret.exp * rev(ways) % mod; 49 ret.way = full - ret.way; 50 ret.full = full; 51 return ret; 52 } 53 54 int main() { 55 static int T; 56 scanf("%d",&T); 57 while( T--) { 58 scanf("%d",&n); 59 for(int i=1;i<=n;i++) 60 scanf("%d",in+i); 61 Node ans = dfs(); 62 printf("%lld %d\n",ans.exp,ans.way); 63 } 64 return 0; 65 }
View Code
正解代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<functional> 6 #include<vector> 7 #include<queue> 8 #define lli long long int 9 #define debug cout 10 using namespace std; 11 const int maxn=5e4+1e2,maxl=1<<17; 12 const int mod = 2013265921 , g = 31; 13 14 int len[maxn]; 15 lli fac[maxn],invfac[maxn]; 16 vector<lli> v[maxn]; 17 priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq; 18 19 inline lli fastpow(lli base,int tme,int mod) { 20 lli ret = 1; 21 while( tme ) { 22 if( tme & 1 ) ret = ret * base % mod; 23 base = base * base % mod; 24 tme >>= 1; 25 } 26 return ret; 27 } 28 inline lli getinv(lli x) { 29 return fastpow(x,mod-2,mod); 30 } 31 inline lli c(int n,int m) { 32 return fac[n] * invfac[m] % mod * invfac[n-m] % mod; 33 } 34 35 inline int revbit(int x,int len) { 36 int ret = 0; 37 for(int t=1;t<len;t<<=1) 38 ret <<= 1 , ret |= x&1 , x >>= 1; 39 return ret; 40 } 41 inline void NTT(lli* dst,int n,int ope) { 42 for(int i=0,j;i<n;i++) { 43 j = revbit(i,n); 44 if( i < j ) swap(dst[i],dst[j]); 45 } 46 for(int len=2;len<=n;len<<=1) { 47 lli per = fastpow( g , mod / len , mod ); 48 if( !~ope ) per = getinv(per); 49 for(int st=0;st<n;st+=len) { 50 lli w = 1; 51 for(int pos=0;pos<len>>1;pos++) { 52 const lli x = dst[st+pos] , y = dst[st+pos+(len>>1)] * w % mod; 53 dst[st+pos] = ( x + y ) % mod , 54 dst[st+pos+(len>>1)] = ( x - y + mod ) % mod; 55 w = w * per % mod; 56 } 57 } 58 } 59 if( !~ope ) { 60 lli inv = getinv(n); 61 for(int i=0;i<n;i++) 62 dst[i] = dst[i] * inv % mod; 63 } 64 } 65 inline void mul(int x,int y) { // multi v[x] v[y] into v[x] and update len[x] 66 static lli a[maxl],b[maxl]; 67 int n = 1 , lx = len[x] , ly = len[y]; 68 while( n <= lx + ly ) n <<= 1; 69 memset(a,0,sizeof(lli)*(n+1)) , memset(b,0,sizeof(lli)*(n+1)); 70 for(int i=0;i<=lx;i++) a[i] = v[x][i]; 71 for(int i=0;i<=ly;i++) b[i] = v[y][i]; 72 NTT(a,n,1) , NTT(b,n,1); 73 for(int i=0;i<n;i++) 74 a[i] = a[i] * b[i] % mod; 75 NTT(a,n,-1); 76 n = len[x] + len[y]; 77 v[x].resize(n+1) , len[x] = n; 78 for(int i=0;i<=n;i++) 79 v[x][i] = a[i]; 80 } 81 82 inline void merge() { 83 while( pq.size() > 1 ) { 84 const int y = pq.top().second; pq.pop(); 85 const int x = pq.top().second; pq.pop(); 86 mul(x,y) , v[y].resize(0); 87 pq.push( make_pair(len[x],x) ); 88 } 89 } 90 inline void prefac(int x) { 91 *fac = 1; 92 for(int i=1;i<=x;i++) 93 fac[i] = fac[i-1] * i % mod; 94 invfac[x] = getinv(fac[x]); 95 for(int i=x-1;~i;i--) 96 invfac[i] = invfac[i+1] * ( i + 1 ) % mod; 97 } 98 inline void getans() { 99 int n , sum = 0 , exp = 1006632961; 100 lli ans = 0; 101 scanf("%d",&n); 102 for(int i=1;i<=n;i++) 103 scanf("%d",len+i) , sum += len[i]; 104 prefac(sum); 105 for(int i=1;i<=n;i++) { 106 v[i].resize(len[i]+1); 107 for(int j=1;j<=len[i];j++) 108 v[i][j] = c(len[i]-1,j-1) * invfac[j] % mod; 109 pq.push( make_pair(len[i],i) ); 110 } 111 merge(); 112 const int x = pq.top().second; pq.pop(); 113 for(int i=1;i<=len[x];i+=2) 114 ans += v[x][i] * fac[i] % mod , ans %= mod; 115 if( n == sum ) exp = n & 1; 116 printf("%d %lld\n",exp,ans); 117 } 118 119 int main() { 120 static int t; 121 scanf("%d",&t); 122 while( t-- ) 123 getans(); 124 return 0; 125 }
View Code
T3:palindrome:
一开始想SAM乱搞发现会被abb坑掉(abb+a),然后交对排用的string的n^5暴力感觉不保险,于是写了一个30分的哈希。(后来发现string也能过...…)
正解暂时弃坑辣!
30分哈希代码:
1 #pragma GCC optimize(3) 2 #pragma GCC optimize("-funsafe-loop-optimizations") 3 #pragma GCC optimize("-funroll-loops") 4 #pragma GCC optimize("-fwhole-program") 5 #pragma GCC target("avx") 6 #include<cstdio> 7 #include<cstring> 8 #define ulli unsigned long long 9 using namespace std; 10 const int maxn=1e3+1e2; 11 const ulli base = 233; 12 const ulli mod = 2013265921; 13 14 char s[maxn]; 15 ulli in[maxn],hsh1[maxn],hsh2[maxn],pows[maxn],ans; 16 int n; 17 18 inline void inithsh() { 19 for(int i=1;i<=n;i++) 20 in[i] = s[i] - 'a' + 1; 21 for(int i=1;i<=n;i++) 22 hsh1[i] = hsh1[i-1] * base + in[i]; 23 for(int i=n;i;i--) 24 hsh2[i] = hsh2[i+1] * base + in[i]; 25 *pows = 1; 26 for(int i=1;i<=n;i++) 27 pows[i] = pows[i-1] * base; 28 } 29 inline ulli segment1(int st,int ed) { 30 --st; 31 return hsh1[ed] - hsh1[st] * pows[ed-st]; 32 } 33 inline ulli segment2(int st,int ed) { 34 ++ed; 35 return hsh2[st] - hsh2[ed] * pows[ed-st]; 36 } 37 inline ulli merge1(int sx,int tx,int sy,int ty) { 38 return segment1(sx,tx) * pows[ty-sy+1] + segment1(sy,ty); 39 } 40 inline ulli merge2(int sx,int tx,int sy,int ty) { 41 return segment2(sy,ty) * pows[tx-sx+1] + segment2(sx,tx); 42 } 43 inline bool judge(int sx,int tx,int sy,int ty) { 44 return merge1(sx,tx,sy,ty) == merge2(sx,tx,sy,ty); 45 } 46 47 int main() { 48 scanf("%s",s+1); 49 n = strlen(s+1); 50 inithsh(); 51 for(int sx=1;sx<=n;++sx) { 52 for(int tx=sx;tx<=n;++tx) 53 for(int sy=1;sy<=n;++sy) 54 for(int ty=sy;ty<=n;++ty) 55 if( judge(sx,tx,sy,ty) ) 56 ans += tx - sx + ty - sy + 2; 57 ans %= mod; 58 } 59 60 printf("%llu\n",ans); 61 62 return 0; 63 }
View Code
最后上ranking,反正T2T3谁也不会就是了。
转载于:https://www.cnblogs.com/Cmd2001/p/8367369.html
20170125小测相关推荐
- 【评分】团队作业-随堂小测(同学录)
[评分]团队作业-随堂小测(同学录) 总结 按时交 - 有分 晚交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 倒扣本次作业分数 本次作业 日不落战队 涉及的训练环境较其他组多(在博客中体 ...
- 随堂小测app(nabcd)
N 现在,老师想要组织测验,需要提前印制试卷,费时费力,考勤采取传统的点名的方式,过程繁琐且结果水分大. 而随堂小测app通过在线答题,智能定位可以帮助老师掌握学生对知识的掌握程度,了解学生的到客情况 ...
- NAS组建日记(一):来块大硬盘先—HGST 10TB NAS硬盘开箱小测
NAS组建日记(一):来块大硬盘先-HGST 10TB NAS硬盘开箱小测 从立冬到正月的数码 18-03-2618:54 传统的机械硬盘的性能已经远远的被SSD固态硬盘甩在了后面,不过大数据时代有着 ...
- 20180110小测
于是我们今天有迎来了一次愉悦的小测. 早晨签到两发大吉,还有一个宜参加模拟赛?buff--. 然后看到了一个暴力分十分良心,怕不是正解不是给人写的了,buf--. 上午上了三节课,书丢了,下课提前走被 ...
- c语言程序设计单元小测,C语言程序设计单元小测2.doc
C语言程序设计单元小测2 C语言程序设计单元小测2 考试形式 闭 卷 答题时间 60 分钟 考试性质 单元测试 一.选择题:(本大题共8小题,每小题5分,共40分) 1.能正确表示逻辑关系:" ...
- 团 队 作 业 ———— 随 堂 小 测
团 队 作 业 ---- 随 堂 小 测 Part 0 · 简 要 目 录 Part 1 · 在 座 的 各 位 Part 2 · 项 目 信 息 Part 3 · 提 交 日 志 Part 4 · ...
- [福大软工] Z班 团队作业——随堂小测(同学录) 作业成绩
团队作业--随堂小测(同学录) 作业链接 http://www.cnblogs.com/easteast/p/7763645.html 作业情况 本次作业从原先预计的3小时,有些组打了鸡血连续肝了4. ...
- 北航操作系统课程-20200511课堂小测-操作系统安全
2020-05-11-课堂小测-操作系统安全 北京航空航天大学计算机学院-2020春操作系统课程 以下题目作者为北航计算机学院操作系统课程组,客观题答案由课程组给出,解析及主观题答案均为博主原创,水平 ...
- 【原创】基站定位小测
[原创]基站定位小测 Author: chad Mail: linczone@163.com 本文可以自由转载,但转载请务必注明出处以及本声明信息. 定位方法: 1.首先要有一块GPRS模块(本次采用 ...
最新文章
- Linux统计行数命令wc(转)
- html css3d效果,html,css的3D变形
- FlashDevelop flex sdk 报错的奇怪问题
- JQuery仿最新淘宝网首页带箭头幻灯片,JQuery轮播图
- c语言形参的隐含存储类型,C存储类型
- 等参元八节点matlab,四边形八节点等参元matlab程序
- 【Java反射】反射机制性能问题、反射操作泛型
- [TJOI2011] 卡片(网络流 + 质因子优化建图)
- gcc编译流程及中间表示层RTL的探索
- python数据挖掘笔记】十八.线性回归及多项式回归分析四个案例分享
- python函数表格_python 6.7 编写printTable()函数表格打印(完整代码)
- Telnet基本概念及C# Telnet 客户端程序
- mssql 不能连接mysql,ASP连接MSSQL的错误:拒绝访问_MySQL
- vasp服务器中断,vasp优化结构没提示直接中断
- 计算机组装维护课件,计算机组装与维护课件(全)
- 计算机专业论文要怎么写,计算机专业本科生论文摘要怎么写 计算机专业本科生论文摘要范文参考...
- 传奇世界开服教程-地图编号与小地图编号查找方法
- POI 导出Excel
- win11系统右键还原win10菜单和恢复
- 共享单车登录显示服务器未响应,ofo共享单车服务为什么出现故障
热门文章
- android 自动表单提交数据,Android 使用三种方式获取网页(通过Post,Get进行表单的提交)...
- assert文件夹 设置android_android使用build.xml配置assert文件中不压缩的类型文件
- 抖音计算机音乐你要我,抖音上很火的我要你快乐我要你快乐是什么歌?
- 元素类型为 “resultMap” 的内容必须匹配 “(constructor?,id*,result*,association*,collection*,discriminator?)”
- Files.newDirectoryStream扫描/过滤目录文件
- linux ping策略打开_linux ping策略打开_如何在Linux服务器禁止和开启ping包 互联网技术圈 互联网技术圈......
- python闭包的原理_web前端:js 闭包原理
- mysql 8.1初始密码_MySQL8.0安装之后查找默认密码
- 画师id_100位插画师是怎么过日子的?
- mysql hex函数性能_mysql hex与unhex 函数的妙用