昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛。。。。。

以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq)

不过我还是日常来补一下题解好了qwq

T1 数字权重(快速幂)



这个就是你把式子\(\sum_{i=2}^n(a_i-a_{i-1})=K\)展开就是\(a_n-a_1\)嘛。。。所以就是水题一个qwq

但是要注意因为数据范围比较大,所以我们要有快速幂。而且注意不合法情况的特判qwq

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define mod 1000000007
using namespace std;
long long n,k,ans=1;
long long mul(long long x,long long y)
{
if(!y) return 1;
else
{
long long ans=mul(x,y>>1);
if(y&1) return (ans*ans%mod)*(x%mod)%mod;
else return ans*ans%mod;
}
}
int main()
{
scanf("%lld%lld",&n,&k);
if(k>=10||n==1||k<=-10)
{
printf("0\n");
return 0;
}
if(k<0)
{
ans=mul(10,n-2)%mod;
ans*=10-abs(k);
}
else
{
ans=mul(10,n-2)%mod;
ans*=9-k;
}
printf("%lld\n",ans%mod);
return 0;
}

T2 毒瘤XOR(异或)(二进制)



这个我是把原数拆成二进制下的数(30位),然后进行贪心。我们要想输出最小的数,那么就在当前位下如果零的个数小于等于一的个数时让ans该位为0,将这个位置记录下来,然后在最后遍历一遍将其ans+=1<<记录的位数。

当然暴力地算不太行,所以我们考虑用前缀和qwq......

然后就60分光荣MLE了。。。我也不知道怎么回事。。。这里附上我的60分代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 100010
using namespace std;
int n,q;
int a[MAXN],l[MAXN],r[MAXN],sum[MAXN][32],sum0[MAXN][32],sum1[MAXN][32];
long long ans;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
int cur=a[i],cnt=-1;
while(cur)
{
sum[i][++cnt]=cur%2;
cur>>=1;
}
for(int j=0;j<=31;j++)
{
if(sum[i][j]==1) sum1[i][j]=sum1[i-1][j]+1,sum0[i][j]=sum0[i-1][j];
else sum0[i][j]=sum0[i-1][j]+1,sum1[i][j]=sum1[i-1][j];
//printf("sum0[%d][%d]=%d sum1[%d][%d]=%d\n",i,j,sum0[i][j],i,j,sum1[i][j]);
}
}
scanf("%d",&q);
for(int i=1;i<=q;i++)
scanf("%d%d",&l[i],&r[i]);
for(register int i=1;i<=q;i++)
{
ans=0;
for(int j=0;j<=31;j++)
{
int cur1=sum0[r[i]][j]-sum0[l[i]-1][j];
int cur2=sum1[r[i]][j]-sum1[l[i]-1][j];
if(cur1<cur2||(cur1&&cur2&&cur1==cur2))
ans+=1<<j;
}
long long ansans=2147483647-ans;
printf("%lld\n",ansans);
} return 0;
}

然后发现可以用位运算来优化掉做法,所以。。。。AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define MAXN 100010
using namespace std;
int n;
int A[MAXN][31],sum[MAXN][31];
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++){
ll x;
scanf("%lld",&x);
for (int j=0;j<=30;j++) A[i][j]=(x&((ll)1<<(ll)j))!=0;
}
for (int i=1;i<=n;i++)
for (int j=0;j<=30;j++)
sum[i][j]=sum[i-1][j]+A[i][j];
int m; scanf("%d",&m);
while (m--){
int l,r; scanf("%d %d",&l,&r);
ll ans=0;
for (int i=30;i>=0;i--){
ans<<=1;
int num=sum[r][i]-sum[l-1][i];
if (2*num<(r-l+1)) ans++;
}
printf("%lld\n",ans);
}
}

T3 硬币游戏(贪心)



这个题刚一看时是博弈论???但是再看就发现是简单的贪心。。。。qwq

题目中有一点描述不清,这里补充一下,该题就是clccle只能取第一列,sarlendy只能取第二列。(刚开始不知道这一点竟然判断起了奇偶性)

然后我们就贪心地先把都是1的标记到,然后clccle取他那一列是1的,然后sarlendy取他那一列是1的。然后判断大小就行了qwq

#include<iostream>
#include<cstdio>
#include<algorithm>
#define MAXN 2000010
using namespace std;
int n,sum1,score1,score2,done[MAXN];
char a[MAXN],b[MAXN];
int main()
{
scanf("%d",&n);
for(int i=1;i<=2*n;i++)
cin>>a[i];
for(int i=1;i<=2*n;i++)
{
cin>>b[i];
if(a[i]=='U'&&b[i]=='U') sum1++,done[i]=1;
}
if(sum1<n)
{
for(int i=1;i<=n;i++)
{
if(a[i]=='U'&&done[i]==0) score1++,done[i]=1;
if(b[i]=='U'&&done[i]==0) score2++,done[i]=1;
}
score1+=(sum1+1)/2;
score2+=sum1-(sum1+1)/2;
if(score1>score2)
cout<<"clccle trl!"<<endl;
else if(score1==score2||(score1>=n&&score2>=n))
cout<<"orz sarlendy!"<<endl;
else cout<<"sarlendy tql!"<<endl;
}
else
cout<<"orz sarlendy!"<<endl;
return 0;
}

T4 粉樱花之恋(矩阵快速幂)(斐波那契数列)



这个一看就是求斐波那契数列前n+1项和的模板题,但是怎么求斐波那契数列的前n项和呢?

这里我们需要用到一个结论:

我们用\(f_i\)来表示斐波那契数列的第\(i\)项,那么它的前n项和为\(\sum_{i=1}^nf_i=f_{n+2}-1\)

下面我们来推导~~

先把左边的展开并+1:

\(\sum_{i=1}^nf_i+1\)

\(=f_1+f_2+f_3+...+f_n+1\)

\(=f_1+f_2+f_3+...+f_n+f_2\)

\(=(f_1+f_2)+f_2+f_3+...+f_n\)

\(=(f_2+f_3)+f_3+...+f_n\)

\(=f_n+f_{n+1}\)

\(=f_{n+2}\)

得证:\(\sum_{i=1}^nfi=f_{n+2}-1\)

那么其他的就超级简单啦!就是模板嘛。。。。。但是考虑到数据范围过大,所以我们要用\(log(n)\)的矩阵快速幂来做

如果有矩阵快速幂不会的可以模板(戳我)

同机房还有dalao用三维矩阵做的,大概就是多开一个来储存和qwq(~~大家可以在我的友链区BLUESKY007 和 dreagonm找到ta们qwq)

下面放上我的代码qwq

#include<iostream>
#include<cstdio>
#include<algorithm>
#define mod 998244353
using namespace std;
struct Matrix
{
long long a[3][3];
};
Matrix res,mul;
long long n,kk[3],ans[3];
Matrix multi(Matrix x,Matrix y)
{
Matrix cur;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
cur.a[i][j]=0;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
cur.a[i][j]=(cur.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
return cur;
}
void solve()
{
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
ans[i]=(ans[i]+kk[j]*res.a[i][j])%mod;
printf("%lld\n",ans[2]-1);
}
int main(){
for(int i=1;i<=2;i++)
res.a[i][i]=1;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
mul.a[i][j]=1;
mul.a[2][2]=0;
kk[1]=kk[2]=1;
scanf("%lld",&n);
if(n==0)
{
printf("1\n");
return 0;
}
if(n==1)
{
printf("2\n");
return 0;
}
n=n+2;
//n--;
while(n)
{
if(n&1)
res=multi(res,mul);
n>>=1;
mul=multi(mul,mul);
}
solve();
return 0;
}

T5 符合条件的整数(高精度)



这个。。。没写高精度,但是支持__int128啊!所以说。。。我们使用__int128类型就可以轻松水过这个题了。

注意我们找符合条件的要向上取整qwq

注意是左闭右开区间qwq,所以记得-1

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll __int128
inline ll f(int x) {
ll a=(((ll)1)<<x)-1;
ll ans=a/7;
if(a%7!=0) ans++;
return ans;
}
int main(){
int n, m;
scanf("%d%d",&n,&m);
printf("%llu",(unsigned long long)(f(m)-f(n)));
return 0;
}`

T6 可爱即正义(字符串)



这个题这个题。。。。再一次让我认识到了STL大法好!!看到别人手动匹配感觉好心累啊,还是用find()比较happy。

不过原先一直不知道find()还可以在指定范围内的字符串中查找字符串,今天算是知道了.....

比如说

    int k=s.find("abc");
//这个是在字符串s中寻找abc,并且返回第一个位置(即a)
int k2=s.find("abc",k+1);
//这个就可以实现在字符串s中寻找abc存在的第二个位置
//因为我们是从第k+1位开始寻找的

所以说代码就比较短吧qwq。。。。。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
string s;
int main()
{
cin>>s;
int ans=0;
int pos=s.find("suqingnianloveskirito");
if(pos==-1) {printf("Yes\n%d %d\n",1,2);return 0;}
int pos2=s.find("suqingnianloveskirito",pos+1);
if(pos2==-1) {printf("Yes\n%d %d\n",pos+1,pos+2);return 0;}
int pos3=s.find("suqingnianloveskirito",pos2+1);
if(pos3==-1) {printf("Yes\n%d %d\n",pos+1,pos2+2);return 0;}
else printf("No\n");
return 0;
}

nowcoder(牛客网)OI测试赛3 解题报告的更多相关文章

  1. nowcoder(牛客网)OI测试赛2 解题报告

    qwq听说是一场普及组难度的比赛,所以我就兴高采烈地过来了qwq 然后发现题目确实不难qwq.....但是因为蒟蒻我太蒻了,考的还是很差啦qwq orz那些AK的dalao们qwq 赛后闲来无事,弄一 ...

  2. 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】

    链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  3. 牛客网-湘潭大学校赛重现H题 (线段树 染色问题)

    链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 n个桶按顺序排列,我们用1~n给桶标号.有两种操作: 1 l r c 区间[l,r]中的每个桶中 ...

  4. 牛客网多校赛第九场A-circulant matrix【数论】

    链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  5. 牛客网多校赛第七场J--Sudoku Subrectangle

    链接:https://www.nowcoder.com/acm/contest/145/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  6. 牛客网多校赛第七场--C Bit Compression【位运算】【暴力】

    链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524 ...

  7. 牛客网多校赛第七场A--Minimum Cost Perfect Matching【位运算】【规律】

    链接:https://www.nowcoder.com/acm/contest/145/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  8. 牛客练习赛 小A与任务 解题报告

    小A与任务 链接: https://ac.nowcoder.com/acm/contest/369/B 来源:牛客网 题目描述 小A手头有 \(n\) 份任务,他可以以任意顺序完成这些任务,只有完成当 ...

  9. 题解——牛客网OI赛制测试赛2

    T1 规律题 考虑先全部选中再去重即可 #include <cstdio> #include <algorithm> #include <cstring> #inc ...

随机推荐

  1. MyBatis 学习记录2 Mapper对象是如何生成的

    主题 以前我一直有一个问题不懂.并且觉得很神奇.就是Mybatis我们开发的时候只需要定义接口,并没有写实现类,为什么我们运行的时候就可以直接使用? 现在我想分享下这部分大致是怎么实现的. 在启动的时 ...

  2. UNITY IMGUI

    这几天研究OPENGL时,想找一个UI库来用,发现了IMGUI,到网上搜索评估中,突然发现它似乎和UNITY有关系. UNITY文档中提到过IMGUI,不知道是不一个东西,仔细看了下文档,果然是.原文 ...

  3. abseil的编译与使用

    项目中集成了abseil.abseil提供了cmake的编译,但是缺少make install命令. 于是有了下面的的一些命令,用于生成include和lib目录. function cmake_in ...

  4. Ubuntu 15.04 开机无法进入图形界面,自动进入emergency mode解决方法

    原因:关机的时候没有正常退出,直接强制关机了... 解决: 就是在那个GIVE root password for maintenance (or type control-D to continue ...

  5. java 蓝桥杯基础练习 01字串 进制转换

    问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺 ...

  6. FP回写报错

    报错信息如下: 提示java for mo 2022报错 执行的DTS如下: 解决方法:(原因:SAP归档日志满了,导致连接失败)1.检查表temp_out_pr中的siteid是否有三个工厂的数据确 ...

  7. Spark之 SparkSql整合hive

    整合: 1,需要将hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放位置. 2,如果Hive的元数据存放在Mysql中,我们还需 ...

  8. [cogs2638]数列操作ψ(双标记线段树)

    题目大意:给定一个数列a,你需要支持的操作:区间and,区间or,询问区间最大值 解题关键: 1.双标记线段树,注意优先级(超时) 当涉及多重标记时,定义出标记的优先级,修改操作时用优先级高(先下放) ...

  9. 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令

    1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...

  10. Lunix7 开放指定端口

    systemctl unmask firewalld.service 此时可以正常启动Firewall了. 接下来顺便讲述一下Firewall的安装,及一些简单配置.   查看状态,看电脑上是否已经安 ...