链接:https://www.nowcoder.com/acm/contest/73/A
来源:牛客网
题目描述
白兔学会了分身术。
一开始有一只白兔,接下来会进行k轮操作,每一轮中每一只白兔都会变成p只白兔。
要求k轮后白兔的总数恰好为n。
要求找到两个正整数p,k,最大化p+k
输入描述:
输入一个正整数n(2<=n<=1018)
输出描述:
输出一个整数,p+k的最大值
示例1
输入
2
输出
3
说明
p=2,k=1

分析:思维题,输出n+1即可;

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;int main() {LL n;scanf("%lld", &n);printf("%lld\n", n + 1);return 0;
} 

链接:https://www.nowcoder.com/acm/contest/73/B
来源:牛客网
题目描述
已知f[1][1]=1,f[i][j]=a*f[i-1][j]+b*f[i-1]=2,1<=j<=i”>j-1。
对于其他情况f[i][j]=0
有T组询问,每次给出a,b,n,m,求f[n][m] mod (998244353)
输入描述:
第一行为一个整数T,表示询问个数。
接下来一共T行,每行四个整数a,b,n,m。
输出描述:
一共T行,每行一个整数,表示f[n][m] mod (998244353)
示例1
输入
2
2 3 3 3
3 1 4 1
输出
9
27
备注:
T<=100000
1<=m<=n<=100000
0<=a,b<=109

分析:找出规律,用逆元处理一下分母即可;

#include<bits/stdc++.h>
using namespace std;
#define LL long longconst int p = 998244353;
const int N = 100000+11;
LL k[N];LL qkm(LL a,LL b,LL c)  {LL s=1,base=a%c;while(b){if(b&1) s=s*base%c;base=base*base%c;b>>=1;}return s%c;
}LL C(LL n,LL m,LL p){return ( ( k[n]*qkm( ( k[n-m]*k[m]) %p , p-2 , p ) ) %p );
}void init(){k[0]=1;for(int i=1;i<=N;i++)(k[i]=k[i-1]*i)%=p;
}int main(){init();int  t;cin>>t;while(t--){LL a,b,n,m;scanf("%lld%lld%lld%lld",&a,&b,&n,&m);LL ans=1;ans=(ans*qkm(a,n-m,p))%p;ans=(ans*qkm(b,m-1,p))%p;ans=(ans*C(n-1,m-1,p))%p;printf("%lld\n",ans);}return 0;
}

链接:https://www.nowcoder.com/acm/contest/73/D
来源:牛客网
题目描述
白兔有一个字符串T。白云有若干个字符串S1,S2..Sn。
白兔想知道,对于白云的每一个字符串,它有多少个子串是和T循环同构的。
提示:对于一个字符串a,每次把a的第一个字符移动到最后一个,如果操作若干次后能够得到字符串b,则a和b循环同构。
所有字符都是小写英文字母
输入描述:
第一行一个字符串T(|T|<=10^6)
第二行一个正整数n (n<=1000)
接下来n行为S1~Sn (|S1|+|S2|+…+|Sn|<=10^7),max(|S1|,|S2|,|S3|,|S4|,..|Sn|)<=10^6
输出描述:
输出n行表示每个串的答案
示例1
输入
abab
2
abababab
ababcbaba
输出
5
2

思路:字符串hash,查询时不宜用map,用邻接表维护。。。

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
typedef long long LL;const int mod = 1410753;
const int MAXN = 2e6 + 10;
const ull base = 233;
char str[MAXN], ch[MAXN];
int head[MAXN];
ull has[MAXN], a[MAXN];
int cnt = 0;struct node {ull to;int next;
}edge[MAXN];void add_edge(ull x) {int pos = x % mod;edge[cnt].to = x;edge[cnt].next = head[pos];head[pos] = cnt++;
}int find(ull x) {int pos = x % mod;int u = head[pos];for(int i = u; ~i; i = edge[i].next) {ull v = edge[i].to;if(v == x) return 1;}return 0;
} inline void init_hash() {a[0] = 1;for(int i = 1; i < MAXN; ++i) {a[i] = a[i - 1] * base;}int len = strlen(str + 1);has[0] = 0;for(int i = 1; i <= len + len; ++i) {has[i] = has[i - 1] * base + str[i];if(i >= len) {str[i + 1] = str[i - len + 1];add_edge(has[i] - has[i - len] * a[len]);}}
}int main() {memset(head, -1, sizeof(head));scanf("%s", str + 1);int T, len = strlen(str + 1);init_hash();scanf("%d", &T);while(T--) {int sum = 0;scanf("%s", ch + 1);int p = strlen(ch + 1);if(p >= len) {for(int i = 1; i <= p; ++i) {has[i] = has[i - 1] * base + ch[i];if(i >= len) sum += find(has[i] - has[i - len] * a[len]);}}printf("%d\n", sum);}return 0;
}

Wannafly挑战赛11 A B D【规律+逆元+字符串hash】相关推荐

  1. [2020.11.26NOIP模拟赛]询问【字符串hash】

    正题 题目链接:https://www.luogu.com.cn/problem/U142342?contestId=37784 题目大意 一个字符串,定义两个字符串相似为用一些字母代替相同的字母后可 ...

  2. Wannafly挑战赛19

    Wannafly挑战赛19 A. 队列Q 需要支持把一个元素移到队首,把一个元素移到队尾,移到队首就直接放到队首前面那个位置,原位置标为0,队尾同理. #include <bits/stdc++ ...

  3. Wannafly挑战赛22游记

    Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...

  4. [Wannafly挑战赛2D-Delete]最短路

    [Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...

  5. Wannafly挑战赛18

    Wannafly挑战赛18 A. 序列 先考虑暴力,相邻两个树之间乘上给定的三种数,递推出下一个位置填什么,然后再check一下,最后一位是否为1即可.这样时间显然不行,但是给我们一种思路,就是中间的 ...

  6. Wannafly 挑战赛27 题解

    Wannafly 挑战赛27 题目连接 https://www.nowcoder.com/acm/contest/215#question A.灰魔法师 题目 题解 考虑到可能的完全平方数只有4004 ...

  7. Wannafly挑战赛24

    Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...

  8. Wannafly挑战赛18B 随机数

    Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...

  9. Wannafly挑战赛14 A-直角三棱锥

    Wannafly挑战赛14 A-直角三棱锥 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 题目描述 在三维空间中,平面 x = 0, y = ...

最新文章

  1. 路由器、路由与路由表
  2. 如何使用多个参数调用Angular.js过滤器?
  3. wxWidgets:wxSlider类用法
  4. Dalvik控制VM详解
  5. 学习linux之用户-文件-权限操作
  6. 在android studio中创建Hello-JNI工程
  7. mysql二级封锁协议_MySQL 行锁、两阶段锁协议、死锁以及死锁检测
  8. IIS/ASP.NET 管道
  9. 转:LoadRunner检查点使用小结
  10. JSP中用request.setAttribute()后,在action中为什么取不到值?
  11. 分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
  12. 云服务器obs_华为云服务器ECS挂载对象存储服务OBS教程
  13. c语言魔方编程,用C语言编程玩转魔方阵小游戏
  14. golang常用库之-mgo.v2包、MongoDB官方go-mongo-driver包、七牛Qmgo包 | go操作mongodb、mongodb bson
  15. 最新H5网页分享到Twitter、Facebook带缩略图
  16. int i2c_probe()
  17. index.php g wap,index.php?g=Wap
  18. 最好网络推广软件-Skycc组合营销软件
  19. 华清远见-重庆中心-前端技术阶段
  20. 一篇文章带你走进深度学习

热门文章

  1. 探寻江南虞山之美 尽享与观致7的一场约会
  2. Echarts图表之雷达图(一)
  3. CocosCreator报:Maximum call stack size exceeded 的问题
  4. 全色和多光谱融合pansharpen的尝试
  5. 极客时间_软件设计之美 笔记
  6. 备份数据 宝塔linux_宝塔面板教程大全--宝塔linux面板数据备份教程
  7. 小米路由器linux界面,小米路由器配置ssh登录方法 | 192.168.1.1登陆页面
  8. 计算机系统要素高清pdf,计算机系统要素:从零开始构建现代计算机[PDF][43.21MB]...
  9. 通俗易懂的讲解二极管三极管工作原理
  10. UA MATH564 概率论 计算至少有一个发生的概率:Waring公式