正题

比赛链接:https://ac.nowcoder.com/acm/contest/1083#question


成绩


可怜的zycT3zycT3zycT3被n=0n=0n=0卡了半天,这里感谢一下排雷


总结

比赛状态较好,后面没有T6T6T6的题解


T1:abcT1:abcT1:abc

题目大意

给出一个字符串,求有多少个abcabcabc子序列

解题思路

用三个数组分别表示aaa的个数,ababab的个数,abcabcabc的个数即可

codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char s[110000];
long long n,a,b,c;
int main()
{scanf("%s",s+1);n=strlen(s+1);for(int i=1;i<=n;i++){if(s[i]=='a') a++;if(s[i]=='b') b+=a;if(s[i]=='c') c+=b;}printf("%lld",c);
}

T2:T2:T2: 子串查询

题目大意

给出一个字符串,qqq个询问,每次询问一个字符串求它是否是前面那个字符串的子序列。

解题思路

用ai,ja_{i,j}ai,j​表示第iii个开始jjj字符最早出现在哪里,然后一个一个跳就好了
时间复杂度O(26n+∑∣q∣)O(26n+\sum |q|)O(26n+∑∣q∣)

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+100;
int n,t,a[N][26];
char s[N],q[60];
int main()
{scanf("%d%d",&n,&t);scanf("%s",s+1);memset(a,127/3,sizeof(a));for(int i=n;i>=1;i--){for(int j=0;j<26;j++)a[i][j]=a[i+1][j];a[i][s[i]-'a']=i;}while(t--){scanf("%s",q+1);int m=strlen(q+1),now=1,flag=0;for(int i=1;i<=m;i++){now=a[now][q[i]-'a']+1;if(now>n+1){flag=1;break;}}if(flag) printf("NO\n");else printf("YES\n");}
}

T3:T3:T3:勾股定理

题目大意

给一个正整数nnn,求两个正整数a,ba,ba,b可以和nnn组成勾股数。

解题思路

先考虑若nnn为奇数我们有a2−b2=n2a^2-b^2=n^2a2−b2=n2
(a+b)(a−b)=n2(a+b)(a-b)=n^2(a+b)(a−b)=n2
若a=b+1a=b+1a=b+1那么有(b+1+b)(b+1−b)=n2(b+1+b)(b+1-b)=n^2(b+1+b)(b+1−b)=n2
2b+1=n22b+1=n^22b+1=n2
那么当nnn为奇数时都有解。
那我们看偶数若a2−b2=n2a^2-b^2=n^2a2−b2=n2我们有(2a)2−(2b)2=(2n)2(2a)^2-(2b)^2=(2n)^2(2a)2−(2b)2=(2n)2
那么我们可以每次将nnn除222到奇数为止然后计算出a,ba,ba,b再乘回去。
但是特殊的是当n=2kn=2^kn=2k时我们将nnn除到444然后用3,53,53,5来进行匹配即可。

codecodecode

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
ll n,a,b,z;
int main()
{scanf("%lld",&n);if(n<=2) return printf("-1")&1; if((n*n)&1) printf("%lld %lld\n",n*n/2,n*n/2+1);else{while(!(n&1)&&n>4){n=n/2;z++;}a=n*n/2;b=n*n/2+1;if(n==4) a=3,b=5;while(z--)a*=2,b*=2;printf("%lld %lld\n",a,b);}
}

T4:T4:T4:羊吃草

题目大意

若干个区间,每次询问一段区间,求这段区间内每个点匹配一个区间最多能匹配到多少个。

解题思路

就是区间配点的问题,和jzoj6274-[NOIP提高组模拟1]梦境【贪心,堆】这题一样,这里不过多称述

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=410;
priority_queue<int> q;
struct node{int l,r;
}a[N];
int L,R,n,m;
bool cMp(node x,node y)
{return x.l<y.l;}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i].l);for(int i=1;i<=n;i++)scanf("%d",&a[i].r);sort(a+1,a+1+n,cMp);for(int i=1;i<=m;i++){scanf("%d%d",&L,&R);int tail=1,ans=0;while(!q.empty()) q.pop();for(int j=L;j<=R;j++){while(tail<=n&&a[tail].l<=j)q.push(-a[tail].r),tail++;while(!q.empty()&&-q.top()<j)q.pop();if(!q.empty()) ans++,q.pop();}printf("%d\n",ans);}
}

T5:T5:T5:数列

题目大意

将一个每个值都非0的序列,求一个序列使得ai=ai−1+1(i&gt;1)a_i=a_{i-1}+1(i&gt;1)ai​=ai−1​+1(i>1)的情况最多

解题思路

我们可以将这个数列分成若干段连续铺满的区间,然后每段长度为lll的区间贡献为l−1l-1l−1,然后价格为(l+1)∗l2\frac{(l+1)*l}{2}2(l+1)∗l​
我们考虑贪心,因为一段长度为lll的区间贡献为l−1l-1l−1,我们可以视为第一个没有贡献,然后我们假设已经知道了要分成kkk段,然后我们让序列长度提前减去kkk那么这样一段长度为lll的区间贡献就是lll了,那我们只需要价值最少就好了,这个我们可以均摊即可。

然后kkk我们进行枚举,时间复杂度O(n)O(n)O(n)

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,N;
int main()
{scanf("%d%d",&n,&m);N=n;for(int i=1;i<=n;i++){int k=n/i,cost=k*(k+1)/2*i+n%i*(k+1);if(cost<=m){int z=0,s=1;while(z<n){for(int j=1;j<=k+(s<=(n%i));j++)printf("%d ",j),z++;s++;}break;}}
}

牛客练习赛51-记录相关推荐

  1. 牛客练习赛51 C、勾股定理 只一边求另外两边 结论

    链接:https://ac.nowcoder.com/acm/contest/1083/C 来源:牛客网 勾股定理 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  2. 牛客练习赛51(C题 勾股定理)

    勾股定理 题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输入描述: 一个整数n. 输出描述: 另外两条边b,c.答案不唯一,只要输出任意一组 ...

  3. 牛客练习赛51 C 勾股定理

    题意: 给出一个数n, 求出b和c, 使得n,b,c能构成直角三角形.      n,b,c均为整数, 0≤n≤1e9,1≤b,c≤1e18 思路: 没想到竟然用打表能找到一些规律.此题打表后就能发现 ...

  4. 牛客练习赛51 C 勾股定理 (结论题)

    大致题意 给一个 n (1<=n<=1e9) ,求其组成直角三角形的另外两条边,输出任意一组即可. 思路 结论题 除了 1,2 没用答案,其余的所有正整数满足以下勾股数结论. 可以记忆一下 ...

  5. 牛客练习赛51 C:勾股定理(勾股数)

    [题目] 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. [代码] int main() {ll n,b,c; scanf("%lld&quo ...

  6. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  8. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  9. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  10. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

最新文章

  1. 软考网络工程师身份证忘记领取啦怎么办
  2. 【LeetCode从零单排】No15 3Sum
  3. 关于Mysql5.7高版本group by新特性报错
  4. 低版本ulibc支持recvmmsg sendmmsg功能
  5. 【JavaScript DOM 编程艺术】 笔记
  6. 【数据结构与算法】之深入解析“寻找旋转排序数组中的最小值II”的求解思路与算法示例
  7. 数据结构--图的广度优先搜索
  8. JavaScript HTML DOM 1
  9. 常用服务的默认端口号总结
  10. Atitit. 资深高级软件工程师and 普通的区别 高度金字塔 深度 广度 1. 高度金字塔 深度 广度 1 1.1. 角色差异高度金字塔 使用者 维修者 制造者 1 1.2. 广度圈 1 1
  11. 【Log4cpp】项目日志Log4cpp的简单使用
  12. 【力学】关于力学的一些基础知识
  13. 软件测试面试题(二)
  14. 【SQL注入17】绕过手法与防御
  15. 数据库-视图(View)详解
  16. win10恢复经典开始菜单_厌倦了默认的Win10开始菜单外观?这是自定义的方法
  17. 半导体精密划片机行业介绍及市场分析
  18. pythonarray什么意思_python数组array.array(转帖)
  19. 29省市倡导「就地过年」,3000万+人异地过年!创历史新高!
  20. 【CSS】div的背景图完整图片覆盖

热门文章

  1. 11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法
  2. java 面相,java学习17-面相对象(多态)
  3. 使用remi安装php70,Linux下使用yum安装LNMP环境
  4. 攻城时服务器维护,8月31日服务器维护更新公告
  5. linux环境下创建postgis数据库,linux下搭建postgresql、postgis、pg_pathman环境步骤详解...
  6. php 常用rpc框架,php的轻量级rpc框架yar
  7. 2019山科计算机专业分数线,2019山东科技大学研究生分数线汇总(含2016-2019历年复试)...
  8. java 反射 int_Java 反射由浅入深 | 进阶必备
  9. [RabbitMQ]什么是MQ
  10. [Spring5]IOC容器_底层原理