题目链接: https://www.nowcoder.com/acm/contest/181#question

A.斐波拉契

求$f[n-1]*f[n+1]-f[n]^2$,$f[n]$为斐波拉契数列第$n$项

算一下前几项不难发现答案为$(-1)^n$,下面用数学归纳法证明一下:

$n=2$时,猜想成立

假设$n=k$时猜想成立,即$f[k-1]*f[k+1]-f[k]^2=(-1)^k$

当$n=k$时,$f[k]f[k+2]-f[k+1]^2=f[k](f[k+1]+f[k])-f[k+1]*(f[k]+f[k-1])=f[k]^2-f[k-1]f[k+1]=(-1)^{k+1}$

得证

#include <cstdio>
#include <algorithm>
#include<vector>
#include<iostream>
#include<cstring>
char s[1000005];
using namespace std;
int main(){
scanf("%s",s);
int l=strlen(s);
int z=s[l-1]-'0';
if(z%2==0)
cout<<1<<endl;
else cout<<-1<<endl;
}

B.送分题

#include <cstdio>
#include <algorithm>
#include<vector>
#include<iostream>
using namespace std;
bool vis[10005];
int a[10005];
vector<int> ans;
int main(){
long long a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

C.序列

暴力就好,先求出该序列每处的前缀和,用map表示该前缀和存在,对于每次查询,先判断k之前是否查询过,查询过则不用判断,再判断序列和是否是k的倍数,否则,对于$1(sum/z)~k(sum/z)$的前缀和是否都存在

#include <cstdio>
#include <algorithm>
#include<vector>
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
typedef long long ll;
const int maxn=100005;
int ans[maxn]; ll a[maxn];
map<ll,int> mp; int main(){
int n,q;
scanf("%d%d",&n,&q);
ll sum=0;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
sum+=a[i];
mp[sum]=1;
}
for(int i=1;i<=q;i++){
int z;
scanf("%d",&z);
if(z>n||sum%z!=0||ans[z]==2){
printf("No\n");
continue;
} if(ans[z]==1){
printf("Yes\n");
continue;
}
for(int i=1;i*(sum/z)<sum;i++){
if(mp[i*(sum/z)]!=1){
printf("No\n");
ans[z]=2;
break;
}
}
if(ans[z]!=2){
printf("Yes\n");
ans[z]=1;
}
}
}

D.小叶的巡查

求下直径就好了

#include <cstdio>
#include <algorithm>
#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100005;
vector< pair<int,int> > g[maxn];
int d[maxn];
bool vis[maxn];
void dfs(int u){
vis[u]=1;
for(int i=0;i<g[u].size();i++){
int v=g[u][i].first;
if(!vis[v]){
d[v]=d[u]+g[u][i].second;
dfs(v);
}
}
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
g[x].push_back(make_pair(y,z));
g[y].push_back(make_pair(x,z));
}
// cout<<-1<<endl;
dfs(1);
int cnt;
long long dmax=0;
for(int i=1;i<=n;i++){
if(d[i]>dmax){
dmax=d[i];
cnt=i;
}
vis[i]=0;
d[i]=0;
}
dmax=0;
dfs(cnt);
for(int i=1;i<=n;i++){
if(d[i]>dmax){
dmax=d[i];
}
}
cout<<dmax*10+(1+dmax)*dmax/2<<endl;
}

E.旅行青蛙

最长上升子序列,但是感觉题意有问题,题目的描述应该是最长不上升子序列233,n比较大,用$O(n*log n)$的写法

#include <cstdio>
#include <algorithm>
#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100005;
int dp[maxn];
int a[maxn];
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int cnt=0;
dp[0]=-1e9;
for(int i=1;i<=n;i++){
if(a[i]>=dp[cnt]){
dp[++cnt]=a[i];
}
else {
int z=upper_bound(dp+1,dp+1+cnt,a[i])-dp;
dp[z]=a[i];
}
}
cout<<cnt<<endl;
}

F.子序列

由题意知,答案与序列的顺序无关,故先将序列排个序,对于序列中的第i个数,需要相乘的次数为$C{n-1}^{k-1}-C{i-1}^{k-1}-C_{n-i}^{k-1}$。又1e9+7为素数,根据欧拉公式$a^{p-1}\equiv1mod p$

即可得出答案

#include <cstdio>
#include <algorithm>
#include<vector>
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1005; ll pmod(ll a,ll b){
if(a==0) return 0;
if(b==0) return 1;
if(b==1) return a%mod;
ll ans=pmod(a,b/2);
ans=ans*ans%mod;
if(b&1)
return ans*a%mod;
return ans;
}
ll a[maxn];
ll c[maxn][maxn];
int main(){
for(int i=0;i<=1000;i++)
c[i][0]=1;
c[1][1]=1;
for(int i=1;i<=1000;i++)
c[i][i]=1;
for(int i=1;i<=1000;i++)
for(int j=1;j<i;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%(mod-1);
int t;
scanf("%d",&t);
while(t--){
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+1+n);
ll ans=1;
for(int i=2;i<n;i++){
ll z=c[n-1][k-1];
if(n-i>=k-1)
z-=c[n-i][k-1];
if(i-1>=k-1)
z-=c[i-1][k-1];
z=((z)%(mod-1)+mod-1)%(mod-1);
z=pmod(a[i],z);
ans=ans*z%mod;
}
printf("%lld\n",ans);
}
return 0;
}

  

牛客OI测试赛1的更多相关文章

  1. 关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契

    牛客A 斐波拉契 链接:https://www.nowcoder.com/acm/contest/181/A来源:牛客网 设f[i]表示斐波那契数论的第i项 f[1]=1,f[2] =1,f[i] = ...

  2. 牛客OI测试赛 C 序列 思维

    链接:https://www.nowcoder.com/acm/contest/181/C来源:牛客网 题目描述 小a有n个数,他想把他们划分为连续的权值相等的k段,但他不知道这是否可行. 每个数都必 ...

  3. 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板

    链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...

  4. 牛客oi测试赛 二 B 路径数量

    题目描述 给出一个 n * n 的邻接矩阵A. A是一个01矩阵 . A[i][j]=1表示i号点和j号点之间有长度为1的边直接相连. 求出从 1 号点 到 n 号点长度为k的路径的数目. 输入描述: ...

  5. [牛客OI测试赛2]F假的数学游戏(斯特灵公式)

    题意 输入一个整数X,求一个整数N,使得N!恰好大于$X^X$. Sol 考试的时候只会$O(n)$求$N!$的前缀和啊. 不过最后的结论挺好玩的 $n! \approx \sqrt{2 \pi n} ...

  6. 牛客OI测试赛2

    题目链接:https://www.nowcoder.com/acm/contest/185#question A.无序组数 暴力求出A和B的因子,注意二元组是无序的,因此还要考虑有些因子在A和B中都存 ...

  7. 【牛客OI赛制测试赛3】 毒瘤xor

    牛客OI赛制测试赛3 毒瘤xor 传送门 题面,水表者自重 Solution 前缀和简单题(挖坑待补) 代码实现 #include<stdio.h> #define int long lo ...

  8. 牛客OI赛制测试赛2(0906)

    牛客OI赛制测试赛2(0906) A :无序组数 题目描述 给出一个二元组(A,B) 求出无序二元组(a,b) 使得(a|A,b|B)的组数 无序意思就是(a,b)和(b,a) 算一组. 输入描述: ...

  9. 牛客OI月赛12-提高组题解

    牛客OI月赛12-提高组 当天晚上被\(loli\)要求去打了某高端oj部分原创的模拟赛,第二天看了牛客的题觉得非常清真,于是就去写了 不难发现现场写出\(260\text{pts}\)并不需要动脑子 ...

随机推荐

  1. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

  2. Amazon SageMaker和NVIDIA NGC加速AI和ML工作流

    Amazon SageMaker和NVIDIA NGC加速AI和ML工作流 从自动驾驶汽车到药物发现,人工智能正成为主流,并迅速渗透到每个行业.但是,开发和部署AI应用程序是一项具有挑战性的工作.该过 ...

  3. DeepLabV3+语义分割实战

    DeepLabV3+语义分割实战 语义分割是计算机视觉的一项重要任务,本文使用Jittor框架实现了DeepLabV3+语义分割模型. DeepLabV3+论文:https://arxiv.org/p ...

  4. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  5. pytest的allure的环境配置

    一.下载地址: https://github.com/allure-framework/allure2/releases 二.配置环境变量: 三.验证allure安装成功

  6. Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://dubbo.apache.org/schema/dubbo]

    dubbo的官方文档写的真好, http://dubbo.apache.org/zh-cn/docs/2.7/user/dependencies/ 在使用dubbo过程中的问题, 和解决 org.sp ...

  7. JUC 并发编程--12, 使用AtomicInteger 实现一把锁(排队自旋锁), 代码演示

    前面 使用自旋锁实现了一把锁,(请看 第5篇) volatile 三大特性: 可见性, 不保证原子性, 禁止指令重排 为了解决 volatile不保证原子性的问题, 引入了原子类, AtomicInt ...

  8. mybatis中sql语句必须用${}而不能不用#{}的情况

    在mybatis中如果我们使用#{}的方式编写的sql时,#{} 对应的变量自动加上单引号 ' ' 例如: select * from #{param} 当我们给参数传入值为user时,他的sql是这 ...

  9. Java IO学习笔记四:Socket基础

    作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...

  10. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...