超级码力在线编程大赛初赛 第2场 T1-T4题解
文章目录
- T3.五字回文
- T2.区间异或
- T1.三角魔法
- T4.小栖的金字塔
T3.五字回文
class Solution {public:/*** @param s: The given string* @return: return the number of Five-character palindrome*/int Fivecharacterpalindrome(string &s) {// write your code hereint sz=s.size();string t;int ans=0;for(int i=0;i<sz-4;i++){t=s.substr(i,5);if(t[0]==t[4]&&t[1]==t[3]&&t[0]!=t[1]&&t[0]!=t[2]&&t[1]!=t1[2])ans++;}return ans;}
};
T2.区间异或
一开口就知道是老数据结构题了,经典的求区间最大值,数据结构用ST表或线段树均可。
(ST表的模板来自于这篇文章)
const int N=5e4+10;
int x,y,k,a[N],lg[N],fmx[N][21],fmi[N][21];
vector<int>t;
class Solution {public:/*** @param num: array of num* @param ask: Interval pairs* @return: return the sum of xor*/int Intervalxor(vector<int> &num, vector<vector<int>> &ask) {// write your code hereint n=num.size();lg[0]=-1;for(int i=1;i<=n;i++){a[i]=num[i-1]; // 先把给出的num数组存到a数组中,方便下标从1开始fmx[i][0]=a[i];//从i开始的连续2^0个数的最大值就等于a[i]本身fmi[i][0]=a[i];lg[i]=lg[i/2]+1;//预处理log2(i),因为cmath库中自带的函数log2(x)速度较慢}for(int j=1;j<=20;j++)//O(nlogn)的预处理for(int i=1;i+(1<<j)-1<=n;i++)//i+2^j-1不能超过边界n{fmx[i][j]=max(fmx[i][j-1],fmx[i+(1<<(j-1))][j-1]);//把[i,i+2^j-1]分成左区间[i,i+2^(j-1)-1]和右区间[i+2^(j-1),i+2^j-1],取较大值fmi[i][j]=min(fmi[i][j-1],fmi[i+(1<<(j-1))][j-1]);}int q=ask.size();int ans=0;for(int i=0;i<q;i++){x=ask[i][0];y=ask[i][1];k=lg[y-x+1];//k为方程2^k<=y-x+1的解的最大值,即log2(y-x+1)向下取整int mx=max(fmx[x][k],fmx[y-(1<<k)+1][k]);x=ask[i][2];y=ask[i][3];k=lg[y-x+1];int mi=min(fmi[x][k],fmi[y-(1<<k)+1][k]);ans=ans^(mx+mi);}return ans;}
};
T1.三角魔法
计算几何的经典题,运用叉乘(向量积)来判断一个点P是否在三角形ABC内部。
(上图中i,j,k为x,y,z轴的单位向量)
typedef long long ll;
class Solution {public:/*** @param triangle: Coordinates of three points* @param point: Xiaoqi's coordinates* @return: Judge whether you can cast magic*/bool istr(int x1,int y1,int x2,int y2,int x3,int y3) // 判断三点是否共线{ll a=(x3-x1)*(y2-y1);ll b=(x2-x1)*(y3-y1);return a!=b; // 不共线,三点可组成三角形}bool judge(int x1,int y1,int x2,int y2,int x3,int y3,int x,int y)// A(x1,y1) B(x2,y2) C(x3,y3) P(x,y)// AB=(x2-x1,y2-y1)// AC=(x3-x1,y3-y1)// BC=(x3-x2,y3-y2)// AP=(x-x1,y-y1)// BP=(x-x2,y-y2)// CP=(x-x3,y-y3)// 判断(x,y)是否在其他三点的内部{ll d=(y-y1)*(x2-x1)-(y2-y1)*(x-x1); // AB×APll q=(y3-y1)*(x2-x1)-(y2-y1)*(x3-x1); // AB×ACif(d*q<0) return false; // 两个叉积异号,说明P,C不在AB的同一侧,那么P在外部d=(y-y2)*(x3-x2)-(y3-y2)*(x-x2); // BC×BPq=(y1-y2)*(x3-x2)-(y3-y2)*(x1-x2); // BC×BAif(d*q<0) return false; // 两个叉积异号,说明P,A不在BC的同一侧,那么P在外部d=(y-y3)*(x1-x3)-(y1-y3)*(x-x3); // CA×CPq=(y2-y3)*(x1-x3)-(y1-y3)*(x2-x3); // CA×CBif(d*q<0) return false; // 两个叉积异号,说明P,B不在CA的同一侧,那么P在外部return true;}string castMagic(vector<vector<int>> &triangle, vector<int> &point) {// write your code hereint ans1=istr(triangle[0][0],triangle[0][1],triangle[1][0],triangle[1][1],triangle[2][0],triangle[2][1]);int ans2=judge(triangle[0][0],triangle[0][1],triangle[1][0],triangle[1][1],triangle[2][0],triangle[2][1],point[0],point[1]);if(ans1&&ans2)return "Yes";else return "No";}
};
T4.小栖的金字塔
首先说明一下,这题是个固定的数列,前人已经研究出公式了,我只是在OEIS上查找这个数列…
用f(i)表示从左上角(1,1)到右下角(i,i)的方案数。
先写个打表代码,打表前10项,看看有没有规律。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10;
ll dp[N+10][N+10];
int main()
{ios::sync_with_stdio(false);for(int i=1;i<=N;i++){dp[i][1]=1;for(int j=2;j<=i;j++){dp[i][j]=dp[i][j-1]+dp[i-1][j-1];if(j!=i)dp[i][j]+=dp[i-1][j];}printf("i=%d dp[i][i]=%lld\n",i,dp[i][i]);}return 0;
}
网页显示,Twice A001003 (except for the first term),也就是说,我们要求的大施罗德数是A001003这个数列中每个数的两倍(除了第一项)。
D-finite with recurrence: (n+1) * a(n) = (6*n-3) * a(n-1) - (n-2) * a(n-2) if n>1. a(0) = a(1) = 1.
按上述公式O(n)递推求出超级卡特兰数,除了第一项(注意这里的第一项下标从0开始),大施罗德数 = 超级卡特兰数 * 2。
typedef long long ll;
const int N=1e7,mod=1e9+7;
ll f[N+10];
ll qpow(ll a,ll b)
{ll s=1;while(b){if(b&1)s=s*a%mod;a=a*a%mod;b/=2;}return s;
}
ll inv(ll a)
{return qpow(a,mod-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*/int pyramid(int n, vector<int> &k) {// write your code hereint sz=k.size();int ans=0;for(int i=0;i<=n;i++){if(i<=1)f[i]=1; // f[0]=f[1]=1;else f[i]=((6*i-3)*f[i-1]%mod-(i-2)*f[i-2]%mod+mod)%mod*inv(i+1)%mod;}for(int i=0;i<sz;i++){int pos=n-k[i];if(pos==0)ans=(ans+f[pos])%mod;else ans=(ans+f[pos]*2)%mod;}return ans;}
};
超级码力在线编程大赛初赛 第2场 T1-T4题解相关推荐
- 超级码力在线编程大赛初赛 第2场 1.三角魔法
超级码力在线编程大赛初赛 第2场 1.三角魔法 题目链接 描述 小栖必须在一个三角形中才能施展魔法,现在他知道自己的坐标和三个点的坐标,他想知道他能否施展魔法 −1e9≤xi,yi≤1e9-1e9\l ...
- 超级码力在线编程大赛初赛第1场-1-树木规划题解
目录 题目描述 示例 输入 输出 说明 分析 代码 动规 贪心 其他题目 题目描述 在一条直的马路上,有n棵树,每棵树有一个坐标,代表它们距离马路起点的距离. 如果每相邻的两棵树之间的间隔不小于d,那 ...
- 超级码力在线编程大赛初赛 第3场 1.最大公倍数
超级码力在线编程大赛初赛 第3场 1.最大公倍数 题目链接 描述 小栖有一个区间,他准备从中取三个数,他想知道如何取才能使得它们的最小公倍数最大 请直接告诉小栖最小公倍数是多少. 示例 输入: a = ...
- 超级码力在线编程大赛初赛 第2场 题解
超级码力在线编程大赛初赛 第2场 题解 题目出的对退役老年选手很友好,拿个T恤跑路- 下面的题解仅代表个人观点,出了问题,概不负责. 比赛链接:https://tianchi.aliyun.com/o ...
- 阿里云 超级码力在线编程大赛初赛 第2场 题目4. 小栖的金字塔(超级卡特兰数+除法求模/乘法逆元)
文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683739284070 2. 解题 按道 ...
- 阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end
文章目录 1. 题目 2. 解题 1. 题目 样例1: 输入: "abcd" "bcda" 输出: true样例2: 输入: "abcd" ...
- 阿里云 超级码力在线编程大赛初赛 第3场 题目2. 房屋染色(DP)
文章目录 1. 题目 2. 解题 1. 题目 有n个房子在一列直线上,现在Bob需要给房屋染色,共有k种颜色. 每个房屋染不同的颜色费用也不同,Bob希望有一种染色方案使得相邻的房屋颜色不同. 但Bo ...
- 阿里云 超级码力在线编程大赛初赛 第3场 题目1. 最大公倍数
文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15179470890799741/85251759933690467 2. 解题 看的 ...
- 阿里云 超级码力在线编程大赛初赛 第3场 题目4. 完美字符串
文章目录 1. 题目 2. 解题 1. 题目 描述 定义若一个字符串的每个字符均为'1',则该字符串称为完美字符串. 给定一个只由'0'和'1'组成的字符串s和一个整数k. 你可以对字符串进行任意次以 ...
- 阿里云 超级码力在线编程大赛初赛 第2场 题目3. 五字回文
文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683722506852 2. 解题 注意 ...
最新文章
- Twitter的应急预案、部署流程
- nginx 将请求全部指向到一个页面
- Linux 普通进程 后台进程 守护进程(转)
- 混沌图像---三翅鹰
- 音乐应用开发Android应用开发--MP3音乐播放器界面设计(2)
- php simpledateformat,Java中SimpleDateFormat的用法介绍(代码示例)
- 格瑞光电:智慧城市建设的引领者
- 28 数组中出现次数超过一半的数字
- 【特色团队采访】慌呀哩团队,用简洁算法达成高效协作
- python简单的爬取网页上的图片
- linux彻底卸载 mysql
- oracle财务系统名称,Oracle财务系统总账模块操作手册
- 二维vector初始化方法
- Android应用内设置多语言,可随系统语言改变而改变,也可设置app为固定语言不受系统语言影响
- 华为智慧屏V55升级鸿蒙2,华为智慧屏将作为第一批升级鸿蒙 OS 2.0 系统的终端产品...
- 数据产品新人的三大有毒问题,你犯了吗?
- 自动定时发送邮件的方法 —— 定时执行专家V6.8
- Vue 2.0/3.0
- vue el-table高度 height自适应
- 智能网联汽车成兵家必争之地,恒驰智能网联汽车亮点何在?