链接:https://www.nowcoder.com/acm/contest/71/A
来源:牛客网

找一找
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y=kx,其中k为大于1的整数

输入描述:

第一行输入一个n
接下来一行输入n个正整数ai

输出描述:

输出符合条件个数
示例1

输入

5
1 2 3 4 5

输出

2

说明

5个数中1和2符合条件,1是后面每个数的因子,2是4的因子

备注:

1≤n,a

i

≤1000000

这个就是利用埃筛的思想枚举就可以了,1需要的次数比较多,特判下吧

还可以离散化,应该跑的更快

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int b[N],a[N],sum;
int main()
{ios::sync_with_stdio(false);int n;cin>>n;for(int i=0; i<n; i++)cin>>a[i],b[a[i]]=1;for(int i=0; i<n; i++){if(a[i]==1){sum++;continue;}for(int j=a[i]+a[i]; j<N; j+=a[i])if(b[j]==1){sum++;break;}}printf("%d\n",sum);return 0;
}

链接:https://www.nowcoder.com/acm/contest/71/C
来源:牛客网

列一列
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An。尽管他计算非常精准,但很快他就弄混了自己的草稿纸,他找出了一些他计算的结果,但他忘记了这些都是数列中的第几项。

输入描述:

每行包括数列中的一项Ak(k<=100000)。

总行数T<=30。

输出描述:

对于每一项Ak,输出一行包括一个正整数k表示输入中数是数列的第几项。

示例1

输入

2
3
5
8
13

输出

2
3
4
5
6

循环节是这样

并不一定我代码能过,等等我的逻辑好像有问题,应该要有冲突的?还是py直接写吧,不难

#include<bits/stdc++.h>
using namespace std;
const int MD=1e8+7,N=1e5+5;
int ans[N];
unordered_map<int,int>M;
int main()
{ans[0]=ans[1]=1;for(int i=2; i<N; i++)ans[i]=(ans[i-1]+ans[i-2])%MD,M[ans[i]]=i;string s;while(cin>>s){int ans=0;for(int i=0; s[i]; ++i)ans=ans*10+(s[i]-'0'),ans%=MD;printf("%d\n",M[ans]);}return 0;
}

好吧,写错了,这么多冲突的,1e9+7只有一个冲突,特判下还是可以的

py代码

ans = []
M = {}
ans.append(1)
M[1] = 1
ans.append(2)
M[2] = 2
for i in range(100000):ans.append(ans[-1] + ans[-2])M[ans[-1]] = len(ans)while True:try:n = input()if n:print(M[int(n)])except EOFError:break

链接:https://www.nowcoder.com/acm/contest/71/D
来源:牛客网

造一造
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

WYF正试图用一个栈来构造一棵树,现在他已经构造了n个元素作为树的节点,只要将这n个元素依次入栈出栈就可以形成一棵树了。当然,这个问题与树并没有关系,所以它叫做WYF的栈。每次你可以入栈一个新元素或者当栈非空时出栈一个元素,n个元素必须依次入栈,而WYF希望其中第m个元素入栈之后,栈中恰好有k个元素,现在他想知道一共有多少种入栈出栈顺序满足这个条件。

输入描述:

第一行一个正整数T,表示数据组数。(1<=T<=10000)对于每组数据包含一行三个正整数n,m,k。

输出描述:

 对于每组数据输出一个正整数表示答案。
由于答案可能过大,所以只需要输出对109+7取模后的答案
示例1

输入

2
3 3 3
3 3 2

输出

1
2

示例2

输入

5
10 3 2
10 2 2
10 7 5
10 6 2
10 7 6

输出

6864
11934
2200
3780
924

示例3

输入

2
5 4 4
5 2 1

输出

5
14

备注:

1<=n,m,k<=10

6

n次入栈m次出栈的合法排列次数则可参考卡特兰数公式。C(n+m,m)-C(n+m,m-1)

#include<bits/stdc++.h>
using namespace std;
const int MD=1e9+7,N=2e6+5;
int f[N],v[N];
int C(int n,int m)
{if(m<0||m>n) return 0;return 1LL*f[n]*v[m]%MD*v[n-m]%MD;
}
int F(int n,int m)
{return (C(n+m,m)-C(n+m,m-1)+MD)%MD;
}
int main()
{v[0]=v[1]=f[0]=f[1]=1;for(int i=2; i<N; i++) f[i]=1LL*f[i-1]*i%MD,v[i]=1LL*v[MD%i]*(MD-MD/i)%MD;for(int i=2; i<N; i++) v[i]=1LL*v[i-1]*v[i]%MD;int n,m,k,T;scanf("%d",&T);while (T--){scanf("%d%d%d",&n,&m,&k);printf("%d\n",1LL*F(m-1,m-k)*F(n-m+k,n-m)%MD);}return 0;
}

看了另一个聚聚是处理倒着的逆元,骚的

inv[i]=inv[p%i]*(p-p/i)%p递推得到逆元

invf[i]=invf[i+1]*(i+1)%p这个公式反递推得到1!~n!的逆元

C(n,m)=A(n,m)/m!=n!/(m!*(n-m)!)所以C(n,m)=C(n,n-m)

所以C(n+m,m)-C(n+m,m-1)=C(n+m,(n+m)-n))-C(n+m,(n+m)-(m-1))=C(n+m,n)-C(n+m,n+1)

#include<bits/stdc++.h>
using namespace std;
const int MD=1e9+7,N=2e6+5;
int INV(int x)
{return x==1?x:1LL*(MD-MD/x)*INV(MD%x)%MD;
}
int f[N],v[N];
int C(int n,int m)
{if(m<0||m>n) return 0;return 1LL*f[n]*v[m]%MD*v[n-m]%MD;
}
int F(int n,int m)
{return (C(n+m,n)-C(n+m,n+1)+MD)%MD;
}
int main()
{f[0]=1;for (int i=1; i<N; i++) f[i]=1LL*f[i-1]*i%MD;v[N-1]=INV(f[N-1]);for (int i=N-2; i>=0; i--) v[i]=v[i+1]*(i+1LL)%MD;int n,m,k,T;scanf("%d",&T);while (T--){scanf("%d%d%d",&n,&m,&k);printf("%d\n",1LL*F(m-1,m-k)*F(n-m+k,n-m)%MD);}return 0;
}

链接:https://www.nowcoder.com/acm/contest/71/B
来源:牛客网

数一数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

设s,t为两个字符串,定义f(s,t) = t的子串中,与s相等的串的个数。如f("ac","acacac")=3, f("bab","babab")=2。现在给出n个字符串,第i个字符串为si。你需要对,求出,由于答案很大,你只需要输出对 998244353取模后的结果。

输入描述:

第一行一个整数n。接下来n行每行一个仅由英文字母构成的非空字符串,第i个字符串代表s

i

输出描述:

共n行,第i行输出

对 998244353取模的结果。
示例1

输入

1
BALDRSKYKirishimaRain

输出

1

备注:

1 ≤ n ≤ 10

6

,所有字符串的总长度不超过2*10

6

B可以KMP 看毛片啊
找到最长的串KMP得到pre的前缀处理,然后对每个字符串进行贡献求积
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5,MD=998244353;
string s[N];
int f[N+N];
int main()
{int n,mi=N+N,ff,ans=1;cin>>n;for(int i=0; i<n; i++){cin>>s[i];if(s[i].size()<mi)mi=s[i].size(),ff=i;}for(int j=1; j<s[ff].size(); j++){int k=f[j];while(k&&s[ff][j]!=s[ff][k]) k=f[k];f[j+1]=s[ff][j]==s[ff][k]?k+1:0;}for(int j=0; j<n; j++){int cnt=0;for(int k=0,l=0; k<s[j].size(); k++){while (l&&s[ff][l]!=s[j][k]) l=f[l];if (s[ff][l]==s[j][k]) l++;if (l==mi)cnt++;}ans=ans*1LL*cnt%MD;}for(int i=0; i<n; i++)cout<<(s[i].size()==mi?ans:0)<<"\n";return 0;
}

链接:https://www.nowcoder.com/acm/contest/71/E
来源:牛客网

组一组
时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 65536K,其他语言131072K
Special Judge, 64bit IO Format: %lld

题目描述

有一个长为 n 的数列 A,其中有 m 个限制条件,条件有两种:
1、对于区间 [l,r],其区间元素按位或和等于 x
2、对于区间 [l,r],其区间元素按位与和等于 x
求出一个数列 A,使得满足给定的 m 个条件,保证有解。

输入描述:

输入第一行两个正整数 n,m,意义如上接下来 m 行,每行四个整数 op,l,r,x,表示一组限制op = 1 表示是限制 1,op = 2 表示是限制 2

输出描述:

输出仅一行,n 个整数 a

i

 表示数列 A。要求 0 <= a

i

 < 10

9

示例1

输入

4 3
1 1 2 9
2 3 4 2
1 2 3 11

输出

1 9 2 6

备注:

1<=n,m<=10^5, 1<=l<=r<=n, 0<=x<2^20

有3维BIT的,竟然还有一个dij的写法,666

#include<iostream>
#include<cstdio>
#include<queue>
const int N=1e5+5;
int n,m,a[N],d[N];
int op[N],L[N],R[N],x[N];
int cnt,head[N];
struct Edge {int to,nxt,len;
}edge[N<<3];
void init() {for(int i=0;i<=n;i++) head[i]=-1;cnt=0;
}
void addEdge(int from,int to,int len) {edge[cnt].to=to;edge[cnt].len=len;edge[cnt].nxt=head[from];head[from]=cnt++;
}
struct Node {int p,len;Node(int p=0,int len=0):p(p),len(len){}bool operator < (const Node &b) const {return len>b.len;}
};
std::priority_queue<Node> q;
void dijkstra() {for(int i=1;i<=n;i++) d[i]=N;d[0]=0;q.push(Node(0,0));while(!q.empty()) {Node c=q.top();q.pop();if(d[c.p]<c.len) continue;for(int i=head[c.p];~i;i=edge[i].nxt) {int v=edge[i].to,w=c.len+edge[i].len;if(d[v]>w) d[v]=w,q.push(Node(v,d[v]));}}
}
void solve(int k) {init();for(int i=1;i<=m;i++) {if(op[i]==1) {if(x[i]>>k&1) addEdge(R[i],L[i]-1,-1);else addEdge(L[i]-1,R[i],0),addEdge(R[i],L[i]-1,0);}else {if(x[i]>>k&1) addEdge(L[i]-1,R[i],R[i]-L[i]+1),addEdge(R[i],L[i]-1,L[i]-1-R[i]);else addEdge(L[i]-1,R[i],R[i]-L[i]);}}for(int i=1;i<=n;i++) addEdge(i,i-1,0),addEdge(i-1,i,1);dijkstra();for(int i=1;i<=n;i++) a[i]|=(d[i]-d[i-1])<<k;
}
int main() {scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) scanf("%d%d%d%d",op+i,L+i,R+i,x+i);for(int i=0;i<20;i++) solve(i);for(int i=1;i<=n;i++) printf("%d%c",a[i],i<n?' ':'\n');return 0;
}

转载于:https://www.cnblogs.com/BobHuang/p/8407316.html

Wannafly挑战赛9相关推荐

  1. Wannafly挑战赛22游记

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

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

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

  3. Wannafly挑战赛19

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

  4. Wannafly挑战赛18

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

  5. Wannafly 挑战赛27 题解

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

  6. Wannafly挑战赛24

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

  7. Wannafly挑战赛18B 随机数

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

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

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

  9. Wannafly挑战赛27 C蓝魔法师

    链接Wannafly挑战赛27 C蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于\(k\),\(n,k\leq 2*10^3\) 假设我们正在考虑\(i\)这个子树,那么 ...

  10. Wannafly挑战赛26-B 冥土追魂

    地址:https://www.nowcoder.com/acm/contest/212/B 思路:对于行列选取,是选择所有行中的最大值的最小值,当是并不能用贪心来做,例如 2 2 2 7 8 1 9 ...

最新文章

  1. 30005 rust_Steam三连冠老游戏《腐蚀(RUST)》为什么突然火起来了?
  2. stm32时钟树讲解
  3. Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
  4. SQL数据定义、查询、更新+空值的处理 实践学习报告
  5. 富文本编辑器ckeditor的使用
  6. java面向对象(1)
  7. 从一次换机器的过程谈软硬件的分离
  8. 迭代子模式(Iterator)
  9. 给页面中的所有链接新窗口中打开
  10. 蓝桥杯 ADV-131算法提高 选择排序
  11. 使用LoadRunner进行性能测试的简单步骤
  12. (1)封装JSON数据的三种方式
  13. CSS-返回顶部代码
  14. [iOS开发]autolayout自动布局
  15. Java定时自动锁屏小程序_小程序 番茄时钟如何实现锁屏持续运行功能
  16. html嵌入flv格式和swf格式视频
  17. linux看caj文件格式,CAJ 文件扩展名: 它是什么以及如何打开它?
  18. 共享硬盘没有权限访问计算机,Win7系统打开磁盘共享说“没有访问权限
  19. office 论文 页码_Word中的论文页码怎么设置?
  20. 全球最小的一款P2P软件——eMuleBT软件框架分析

热门文章

  1. eclipse中开发python
  2. pt,px,rem和em之间区别总结
  3. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
  4. mysqldiff对比主从表结构是否一致
  5. HDMI都不灵,为什么电脑连电视效果差
  6. IE相关的一些BUG汇总
  7. 键盘谍影 键盘监视器的原理和防范
  8. Linux安全管理:一,sshd配置
  9. LintCode刷题——Largest Divisible Subset
  10. CentOS 7 网页加载速度慢的解决办法