心得

打了一下被群友吐槽的比赛,阅读体验极差

阴间题面,读题1小时,AC5min,原题警告

思路来源

https://blog.csdn.net/PleasantlY1/article/details/84074637

题目

A.三角魔法

给定三个点ABC,再给一个点P,

问P是否在ABC构成的三角形上,在某一条边上也算

抄了个计算几何的板子,

判断一个点P是否在三角形ABC内,大致思路,

考虑P向ABC三点连线,形成三个向量PA,PB,PC

那么P如果在ABC内部,下述两种情况必成立之一,

①PA在PB顺时针,PB在PC顺时针,PC在PA顺时针

②PA在PB逆时针,PB在PC逆时针,PC在PA逆时针

叉积判断一下向量的顺逆关系,等于0是出现在某一条边上的情形

注意判断ABC三点共线的情况

class Solution {
public:/*** @param triangle: Coordinates of three points* @param point: Xiaoqi's coordinates* @return: Judge whether you can cast magic*/typedef long long ll;struct Point{ll x,y;Point(){}Point(ll xx,ll yy):x(xx),y(yy){}Point operator-(Point &a){return Point(x-a.x,y-a.y);}};ll det(Point a,Point b){return a.x*b.y-a.y*b.x;}ll dot(Point a,Point b){return a.x*b.x+a.y*b.y;}bool on(Point pi,Point pj,Point Q){if(det(Q-pi,pj-pi)==0&&min(pi.x,pj.x)<=Q.x&&Q.x<=max(pi.x,pj.x)&&min(pi.y,pj.y)<=Q.y&&Q.y<=max(pi.y,pj.y)){return true;}return false;}   bool in(Point a,Point b,Point c,Point p){Point pa(a-p),pb(b-p),pc(c-p);ll t1=det(pa,pb),t2=det(pb,pc),t3=det(pc,pa);__int128 x=t1,y=t2,z=t3;return x*y>=0 && x*z>=0;}string castMagic(vector<vector<int>> &triangle, vector<int> &point) {// write your code herePoint a(triangle[0][0],triangle[0][1]);Point b(triangle[1][0],triangle[1][1]);Point c(triangle[2][0],triangle[2][1]);Point d(point[0],point[1]);Point e(b-a),f(c-a);if(det(e,f)==0){if(on(a,b,d) || on(a,c,d) || on(b,c,d))return "Yes";return "No";}else{if(in(a,b,c,d))return "Yes";return "No";}}
};

B.区间异或

给一个5e4长的数组a[],

若干个询问,由一个vector给出,每个询问包括四个数[l1,r1,l2,r2],

这次询问对答案的贡献,是[l1,r1]区间的最大值+[l2,r2]区间的最小值

最终的答案,是每次询问的贡献的异或和,输出最终答案

区间RMQ,ST表裸题,线段树也能做

class Solution {
public:/*** @param num: array of num* @param ask: Interval pairs* @return: return the sum of xor*/int mn[50005][16],mx[50005][16],lg[50005];int amx(int l,int r){int x=lg[r-l+1];return max(mx[l][x],mx[r-(1<<x)+1][x]);}int amn(int l,int r){int x=lg[r-l+1];return min(mn[l][x],mn[r-(1<<x)+1][x]);}int Intervalxor(vector<int> &num, vector<vector<int>> &ask) {// write your code hereint n=num.size();for(int i=1;i<=n;++i)mn[i][0]=mx[i][0]=num[i-1];lg[1]=0;for(int i=2;i<=n;++i)lg[i]=lg[i/2]+1;for(int len=1;(1<<len)<=n;++len){for(int l=1;l+(1<<len)-1<=n;++l){int r=l+(1<<len)-1;mx[l][len]=max(mx[l][len-1],mx[l+(1<<(len-1))][len-1]);mn[l][len]=min(mn[l][len-1],mn[l+(1<<(len-1))][len-1]);}}int ans=0,sz=ask.size();for(int i=0;i<sz;++i){int l1=ask[i][0],r1=ask[i][1],l2=ask[i][2],r2=ask[i][3];ans^=(amx(l1,r1)+amn(l2,r2));}return ans;}
};

C.五字回文

签到题,注意abc是三种不同的字母

class Solution {
public:/*** @param s: The given string* @return: return the number of Five-character palindrome*/int Fivecharacterpalindrome(string &s) {// write your code hereint ans=0;for(int i=2;i+2<s.size();++i){if(s[i-2]==s[i+2] && s[i-1]==s[i+1] && s[i]!=s[i-1] && s[i]!=s[i-2] && s[i-1]!=s[i-2]){ans++;}}return ans;}
};

D.小栖的金字塔

求从(k,k)只能向右或向上走,不能越过y=x这条对角线,走到(n,n)的方案数

比如,(k,k)只能走到(k+1,k),而(k+1,k)可以走到(k+1,k+1)或(k+2,k)

数据保证1<=k<=n<=1e7,

k由一个vector给出,需要对vector里的每个k都求方案数,

最后对所有方案数求总和,答案模1e9+7

如果听说过大施罗德数或超级卡特兰数,那么这就是个原题

如果手推出前几项然后OEIS一下找到数列,那么这就是个原题

大施罗德数(OEIS A006318),即本题所求,前几项为1, 2, 6, 22, 90, 394, 1806, 8558, 41586, 206098,...

超级卡特兰数前几项为1, 1, 3, 11, 45, 197, 903, 4279, 20793, 103049,...

可以发现除了第一项外,其余项大施罗德数=超级卡特兰数*2

而超级卡特兰数递推公式:

class Solution {
public:/*** @param n: The number of pyramid levels n* @param k: Possible coordinates k* @return: Find the sum of the number of plans*/typedef long long ll;static const int mod=1e9+7;static const int N=1e7+10;int inv[N],ans[N];void init(int n){inv[0]=inv[1]=1;for(int i=2;i<=n;++i)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;ans[0]=ans[1]=1;for(int i=2;i<=n-1;++i)ans[i]=1ll*(1ll*(6*i-3)*ans[i-1]%mod-1ll*(i-2)*ans[i-2]%mod+mod)%mod*inv[i+1]%mod;}int cal(int k,int n){if(n==k)return 1;return 1ll*ans[n-k]*2%mod;}int pyramid(int n, vector<int> &k) {// write your code hereinit(N-5);int sz=k.size(),ans=0;for(int i=0;i<sz;++i){int x=k[i];ans=(ans+cal(x,n))%mod;}return ans;}
};

阿里云天池超级码力在线编程大赛初赛 第2场 ABCD(A.计算几何 判断点在三角形内 D.大施罗德数/超级卡特兰数)相关推荐

  1. 超级码力在线编程大赛初赛第1场-1-树木规划题解

    目录 题目描述 示例 输入 输出 说明 分析 代码 动规 贪心 其他题目 题目描述 在一条直的马路上,有n棵树,每棵树有一个坐标,代表它们距离马路起点的距离. 如果每相邻的两棵树之间的间隔不小于d,那 ...

  2. 超级码力在线编程大赛初赛 第2场 1.三角魔法

    超级码力在线编程大赛初赛 第2场 1.三角魔法 题目链接 描述 小栖必须在一个三角形中才能施展魔法,现在他知道自己的坐标和三个点的坐标,他想知道他能否施展魔法 −1e9≤xi,yi≤1e9-1e9\l ...

  3. 超级码力在线编程大赛初赛 第3场 1.最大公倍数

    超级码力在线编程大赛初赛 第3场 1.最大公倍数 题目链接 描述 小栖有一个区间,他准备从中取三个数,他想知道如何取才能使得它们的最小公倍数最大 请直接告诉小栖最小公倍数是多少. 示例 输入: a = ...

  4. 超级码力在线编程大赛初赛 第2场 题解

    超级码力在线编程大赛初赛 第2场 题解 题目出的对退役老年选手很友好,拿个T恤跑路- 下面的题解仅代表个人观点,出了问题,概不负责. 比赛链接:https://tianchi.aliyun.com/o ...

  5. 阿里云 超级码力在线编程大赛初赛 第2场 题目4. 小栖的金字塔(超级卡特兰数+除法求模/乘法逆元)

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683739284070 2. 解题 按道 ...

  6. (天池)超级码力在线编程大赛初赛 第2场

    题目:click 1.三角魔法 叉乘判断.注意三点构不成三角形的坐标情况,应该是要非退化三角形.(粘个板子) typedef long long ll; #define inf 0x3f3f3f3f ...

  7. 超级码力在线编程大赛初赛 第2场 【题解】

    三角魔法 思路 1.利用叉乘判断点是否在直线的逆时针方向 2.如果点是在三条边的逆时针方向,则点在三角形内. 3.坑点:判断三点是否形成三角形,也是利用叉乘判断. AC代码 class Solutio ...

  8. 超级码力在线编程大赛初赛 第2场 T1-T4题解

    文章目录 T3.五字回文 T2.区间异或 T1.三角魔法 T4.小栖的金字塔 T3.五字回文 class Solution {public:/*** @param s: The given strin ...

  9. 阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end

    文章目录 1. 题目 2. 解题 1. 题目 样例1: 输入: "abcd" "bcda" 输出: true样例2: 输入: "abcd" ...

最新文章

  1. git 拉去merged 仓库的代码步骤
  2. 传递数组_Fortran:派生数组与数组传递进子程序耗费时间比较
  3. char和varchar的区别以及尾部空格问题 - sqlserver演示
  4. Android Studio 中文显示方块□□问题解决
  5. Ansible的Inventory管理
  6. 安卓修改wifi已停用_手机连不上wifi显示已保存怎么回事【原因介绍】
  7. java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...
  8. db2 teradata mysql_DB2 DPF VS Teradata选型对比?
  9. rx560d linux 图形设计,RX560D与560区别对比:RX 560D和RX 560哪个好
  10. 按键精灵post请求_手把手教你使用按键精灵post登陆网页
  11. 牛客网 - 编程初学者入门训练 - 分支控制(BC50~BC77)
  12. Ansys 2022 安装教程(附赠免费的安装包)
  13. C#指定图片添加文字——修改版
  14. C++实现单例模式 —— 打印机
  15. Bat_PNG转PDF,读取系统剪切板
  16. 淘宝直播窄带高清技术
  17. fifa18怎么改服务器位置,fifa18 球员职业生涯怎么改位置 | 手游网游页游攻略大全...
  18. mysql报1142错误
  19. Gauss quadrature approximation by Lanczos algorithm
  20. 浏览器清理缓存快捷键

热门文章

  1. html5与ccs网页制作,HTML5CCS3(1) 网页的构造块
  2. 活动目录是什么?有什么用?
  3. com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `x`
  4. 开发者分享在PC上制作iOS游戏的经验(下)
  5. 亲测!Ubuntu18.04与WIN10双系统(USB EFI方式安装—Grub2.0引导修复)完整教程
  6. 君子博学而日参省乎己,则知明而行无过矣
  7. 制作 win10 u 盘安装盘
  8. python爬取股票图_python 股票数据爬取(两种方法)
  9. 手工删除Windows桌面搜索的方法
  10. 专攻心脑疾病AI市场,数坤科技完成创世伙伴领投2亿元B轮融资