链接: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

输出描述:

输出符合条件个数

输入例子:
5
1 2 3 4 5
输出例子:
2

-->

示例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+;
int b[N],a[N],sum;
int main()
{
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=; i<n; i++)
cin>>a[i],b[a[i]]=;
for(int i=; i<n; i++)
{
if(a[i]==)
{
sum++;
continue;
}
for(int j=a[i]+a[i]; j<N; j+=a[i])
if(b[j]==)
{
sum++;
break;
}
}
printf("%d\n",sum);
return ;
}

链接: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表示输入中数是数列的第几项。

输入例子:
2
3
5
8
13
输出例子:
2
3
4
5
6

-->

示例1

输入

2
3
5
8
13

输出

2
3
4
5
6

循环节是这样

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

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

好吧,写错了,这么多冲突的,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取模后的答案
 

输入例子:
2
3 3 3
3 3 2
输出例子:
1
2

-->

示例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+,N=2e6+;
int f[N],v[N];
int C(int n,int m)
{
if(m<||m>n) return ;
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-)+MD)%MD;
}
int main()
{
v[]=v[]=f[]=f[]=;
for(int i=; i<N; i++) f[i]=1LL*f[i-]*i%MD,v[i]=1LL*v[MD%i]*(MD-MD/i)%MD;
for(int i=; i<N; i++) v[i]=1LL*v[i-]*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-,m-k)*F(n-m+k,n-m)%MD);
}
return ;
}

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

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+,N=2e6+;
int INV(int x)
{
return x==?x:1LL*(MD-MD/x)*INV(MD%x)%MD;
}
int f[N],v[N];
int C(int n,int m)
{
if(m<||m>n) return ;
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+)+MD)%MD;
}
int main()
{
f[]=;
for (int i=; i<N; i++) f[i]=1LL*f[i-]*i%MD;
v[N-]=INV(f[N-]);
for (int i=N-; i>=; i--) v[i]=v[i+]*(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-,m-k)*F(n-m+k,n-m)%MD);
}
return ;
}

链接: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
BALDRSKYKirishimaRain
输出例子:
1

-->

示例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+,MD=;
string s[N];
int f[N+N];
int main()
{
int n,mi=N+N,ff,ans=;
cin>>n;
for(int i=; i<n; i++)
{
cin>>s[i];
if(s[i].size()<mi)mi=s[i].size(),ff=i;
}
for(int j=; j<s[ff].size(); j++)
{
int k=f[j];
while(k&&s[ff][j]!=s[ff][k]) k=f[k];
f[j+]=s[ff][j]==s[ff][k]?k+:;
}
for(int j=; j<n; j++)
{
int cnt=;
for(int k=,l=; 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=; i<n; i++)
cout<<(s[i].size()==mi?ans:)<<"\n";
return ;
}

链接: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

输入例子:
4 3
1 1 2 9
2 3 4 2
1 2 3 11
输出例子:
1 9 2 6

-->

示例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+;
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<<];
void init() {
for(int i=;i<=n;i++) head[i]=-;cnt=;
}
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=,int len=):p(p),len(len){}
bool operator < (const Node &b) const {
return len>b.len;
}
};
std::priority_queue<Node> q;
void dijkstra() {
for(int i=;i<=n;i++) d[i]=N;
d[]=;q.push(Node(,));
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=;i<=m;i++) {
if(op[i]==) {
if(x[i]>>k&) addEdge(R[i],L[i]-,-);
else addEdge(L[i]-,R[i],),addEdge(R[i],L[i]-,);
}
else {
if(x[i]>>k&) addEdge(L[i]-,R[i],R[i]-L[i]+),addEdge(R[i],L[i]-,L[i]--R[i]);
else addEdge(L[i]-,R[i],R[i]-L[i]);
}
}
for(int i=;i<=n;i++) addEdge(i,i-,),addEdge(i-,i,);
dijkstra();
for(int i=;i<=n;i++) a[i]|=(d[i]-d[i-])<<k;
}
int main() {
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++) scanf("%d%d%d%d",op+i,L+i,R+i,x+i);
for(int i=;i<;i++) solve(i);
for(int i=;i<=n;i++) printf("%d%c",a[i],i<n?' ':'\n');
return ;
}

Wannafly挑战赛9的更多相关文章

  1. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  2. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  3. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  4. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  5. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  6. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

  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挑战赛22游记

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

  9. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

  10. Wannafly挑战赛18 E 极差(线段树、单调栈)

    Wannafly挑战赛18 E 极差 题意 给出三个长度为n的正整数序列,一个区间[L,R]的价值定义为:三个序列中,这个区间的极差(最大值与最小值之差)的乘积. 求所有区间的价值之和.答案对\(2^ ...

随机推荐

  1. jsp另外五大内置对象之response-操作cookie

    responseo3.jsp <%@ page language="java" contentType="text/html; charset=utf-8" ...

  2. Android内核剖析(1)

    Linux的启动过程 开机上电执行bootloader,将内核的前n条指令加载到系统内存中------>系统内核的初始化----------->启动应用程序. bootloader的位置装 ...

  3. js原型,原型链的理解

    1.所有引用类型(函数.数组.对象)都拥有_proto_属性(隐式原型) 2.所有函数拥有prototype属性(显式原型)(仅限函数) 3.原型对象:拥有prototype属性的对象,在定义函数时就 ...

  4. 2018.2.12 PHP 如何读取一亿行的大文件

    PHP 如何读取一亿行的大文件 我们可能在很多场景下需要用 PHP 读取大文件,之后进行处理,如果你没有相关的经验可以看下,希望能给你带来一些启发. 模拟场景 我们有一个 1亿 行,大小大概为 3G ...

  5. 实验1 c语言最基本内容

    part 1 验证性内容 总结:经受了数组和结构体的双重折磨后,发现这部分好简单...现在没啥问题了... part  2  补全程序 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数 ...

  6. C09 指针

    目录 指针相关概念 指针变量 null指针 指针的算术运算 指针数组 指向指针的指针 传递指针给函数 从函数返回指针 指针相关概念 变量 如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个 ...

  7. 关于UINavigationController的一些技巧

    未自定义任何东西的导航条效果如下: 1.自定义了 leftBarButtonItem 之后,左滑返回手势失效了,解决办法: self.navigationController.interactiveP ...

  8. Find the Longest Word in a String-freecodecamp算法题目

    Find the Longest Word in a String(找出最长单词) 要求 在句子中找出最长的单词,并返回它的长度 函数的返回值应该是一个数字. 思路 用.split(' ')将句子分隔 ...

  9. linux文件属性文文件类型知识

    文件类型分别介绍: 1.普通文件:我们通过用ls  -l来查看xxx.sql的属性,可以看到第一列内容为-rw-r--r--,值得注意的是第一个符号是-(英文字符减号),在Linux中,以这样的字符开 ...

  10. destoon 支付异步接口文件 notify.php 调试方式

    在if($verify_result) { 之前复制这三个变量 就可以直接访问notify.php 启用调试模式 或者 逐步echo 相关变量来调试 错误原因   notify.php没有入口文件 是 ...