【洛谷T89353 【BIO】RGB三角形】】的更多相关文章

洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的去掉(枚举所有的矩阵把每个矩阵的对角线去掉) 每一条对角线可以取得首尾两点有(n-i)*(m-j)*2种方式可以选择 每一条对角线除了首尾两个点之外可以取到中间点有gcd(i,j)-1个 因此有对于每个条对角线有gcd(i,j)-1种要去掉(相似三角形) 代码 #include<iostream>…
题目链接 这个题我一开始显然直接暴力 然后30分(但是应用数据分治的我通过复杂度判断并且其余输出0的能力硬生生的拿下了60分) 主要还是讲正解 这里有一个结论 这样一个图,红点的值可以通过两个黄点来判断 我们有数学归纳法可以推广到3k+1 这样我们就可以用类似于LCA的倍增思想写出代码 #include<cstdio> #include<iostream> #include<queue> #include<cstring> using namespace s…
数字三角形 题目链接 4 16 3 1 2 4 3 1 2 4 (3+1) (1+2) (2+4)(3+1+1+2) (1+2+2+4) (3+1+1+1+2+2+2+4)16=1*3+3*1+3*2+1*4 首先,我们可以发现每个数字被加上的次数是一个杨辉三角形的一行 利用公式C(n,i)=(n-i+1)*C(n,i-1)/i 可以推出系数 然后爆搜,加一点小剪枝 #include<iostream> #include<cstring> #include<cstdlib&g…
题目描述 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. 输入输出格式 输入格式: 输入一行,包含两个空格分隔的正整数m和n. 输出格式: 输出一个正整数,为所求三角形数量. 输入输出样例 输入样例#1: 2 2 输出样例#1: 76 数据范围 1 —————————————————————————————————————————————————————————————————————————————————— 这道题呢…
题目 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数m和n. 输出格式 输出一个正整数,为所求三角形数量. 输入样例 2 2 输出样例 76 数据范围 1<=m,n<=1000 题解 比较容易想到的是用所有方案\(C_{n*m}^{3}\)减去共线的方案 水平和竖直共线很容易算,为\(n * C_{m}^{3}\)和\(m * C_{n}^{3}\) 主要是倾斜的线 我们…
简单dfs 我们注意到,题目中的运算方式与杨辉三角极其相似,所以说本题实际上是一道加权的杨辉三角,搜索系数 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cstdlib> #include <cmath> using namespace std; int init(){ int rv=0,fh=1; cha…
https://www.luogu.org/problem/show?pid=1118#sub 题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N <= 10) in a certain order and then sum adjacent numbers to produce a new list with one fewer number. Th…
状态: dp[i][j]表示用i和j的木板能否搭成,不用去管第三块,因为知道了两块的长度与周长,那就可以表示出第三块:c-i-j 转移 有点类似于背包 if((j-l[i]>=0&&dp[j-l[i]][k])||(k-l[i]>=0&&dp[j][k-l[i]]))dp[j][k]=1; 因为此状态只可能从没加上这根木板的时候转移过来 判断 判断这三块木板能否组成三角形 inline bool check(int a,int b,int c) { if(a+b…
#include<iostream> using namespace std ; ; int y[N][N]; int n; int a[N]; bool st[N]; int sum; bool flag; void print() { ; i<=n; i++) cout<<a[i]<<" "; } void dfs(int step,int ans) { if(ans>sum||flag) return ; &&ans…
T89353 [BIO]RGB三角形 题解 对于这个题目有一个规律:  如果一个数列的长度为 3k+1(0<=k) 那么,这个数列最终缩放成的一个字母只和这个数列的首项,尾项有关 所以我们可以先判断输入的这个数列长度是否为 3k+1(0<=k) ,如果是,那就直接处理好了 否则就找到一个最大的 3k+1,然后把这个数列划分成更多的这么长的小区间,一点点处理 每次处理后序列长度都会缩短,那么相应的 3k+1也要更新 最后处理到只剩下一个字母啦,就是答案了 代码 #include<iostr…