聚名网官网登录,宁波seo推荐,做网站需准备些什么软件,引进韩国电影题目一#xff1a;验题人的生日【算法赛】
验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路#xff1a;
1.又是偶数#xff0c;又是质数#xff0c;那么只有2喽
AC_Code:C
#include iostream
using namespace std;
int main()
{cout2;return 0;
…题目一验题人的生日【算法赛】
验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路
1.又是偶数又是质数那么只有2喽
AC_Code:C
#include iostream
using namespace std;
int main()
{cout2;return 0;
}
AC_Code:java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(2);scan.close();}
} 题目二蓝桥小课堂【算法赛】
蓝桥小课堂【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路
1.组成三角形的条件任意两边大于第三边
2.注意不要用sqrt函数因为输出的是面积的平方最后直接输出即可用sqrt函数时可能有的数据不是平方数开放后会有精度损失导致一直无法AC
AC_Code:C
#include iostream
using namespace std;typedef long long LL;int main()
{LL a,b,c; cinabc;if(abcacbbca){ //任意两边大于第三边LL s(abc)/2;LL anss*(s-a)*(s-b)*(s-c);coutansendl;}else cout-1endl;return 0;
}
AC_Code:java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);long asc.nextLong(),bsc.nextLong(),csc.nextLong();if(abcacbbca){ //任意两边大于第三边long s(abc)/2;long anss*(s-a)*(s-b)*(s-c);System.out.println(ans);}else System.out.println(-1);}
} 题目三压缩矩阵【算法赛】
压缩矩阵【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路找规律/数学
1.第一行和最后一行是两个数其他行都是三个数
2.先算出行算出行后让列也等于行用x模3看余数是几看是需要偏移余数为1向右偏移一位余数为2向左偏移一位余数为0不需要偏移
3.算行的话就是找规律了x4/3就是行
AC_Code:C
#include iostream
#include cstring
#include algorithm
#include vector
#include queue
#includestack
#includecmath
#include unordered_set
#include unordered_map
#includeset
#include mapusing namespace std;typedef long long LL;
typedef pairint,intPII;#define x first
#define y second
#define ls u1
#define rs u1|1
#define all(ss) ss.begin(),ss.end()int const mod1998244353;
int const mod21e97;
int const N2e57;
int const INF0x3f3f3f3f;int T;
int m;
int a[N];
string s;void solve(){LL n;scanf(%lld%d, n, m);while (m -- ){LL x;scanf(%lld, x);LL row(x4)/3; //计算行LL colrow;//看是否需要向左右偏移if(x%32) col--;else if(x%31) col;printf(%lld %lld\n,row,col);}
} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T1;//cinT;//scanf(%d,T);init();while(T--){solve();}return 0;
}
AC_Code:java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scnew Scanner(System.in);long nsc.nextLong();int qsc.nextInt();while(q--0) {long xsc.nextLong();long row(x4)/3; //算出行long colrow;//看是否要向左右偏移if(x%31) col;else if(x%32) col--;System.out.println(row col);}}
}题目四恒纪元【算法赛】
恒纪元【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路
1.乱纪元的增长速度是非常快的2^401e12所以乱纪元是非常少的,那么可以预处理出所有的乱纪元
2.对于每一个询问s,暴力找到大于s的第一个恒纪元t再暴力二分也可以找到第一个大于t的乱纪元用第一个大于t的乱纪元-t就是恒纪元可以持续的天数了
3.这个的预处理其实是一个谜预处理不好很容易只能过25%的测试样例预处理出小于1e13次方的乱纪元就可以过
AC_Code:C
#include iostream
#include cstring
#include algorithm
#include vector
#include queue
#includestack
#includecmath
#include unordered_set
#include unordered_map
#includeset
#include mapusing namespace std;typedef long long LL;
typedef pairint,intPII;#define x first
#define y second
#define ls u1
#define rs u1|1
#define all(ss) ss.begin(),ss.end()int const mod1998244353;
int const mod21e97;
int const N2e57;
LL const INF1e13;int T;
int n,q;
int x,y,z;
setLLvis; //存储乱纪元LL qpow(int a,int b){LL res1;for(int i0;ib;i){resres*a;if(resINF) return -1; //大于正无穷了}return res;
}void solve(){scanf(%d%d%d,x,y,z);for(int i0;i40;i){LL aqpow(x,i);if(a-1) break;//大于正无穷了for(int j0;j40;j){LL bqpow(y,j);if(b-1) break;//大于正无穷了for(int k0;k40;k){LL cqpow(z,k);if(c-1) break;//大于正无穷了LL sabc;if(sINF) break; //三者相加大于正无穷vis.insert(s);}}}scanf(%d,q);while(q--){LL s; scanf(%lld,s); LL ts1;while(vis.count(t)) t; //找到第一个恒纪元//二分找到第一个大于t的乱纪元,相减求恒纪元持续了多少天printf(%lld %lld\n,t,*vis.upper_bound(t)-t);}
} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T1;//cinT;//scanf(%d,T);init();while(T--){solve();}return 0;
}
AC_Code:java import com.sun.source.tree.Tree;import java.util.*;public class Main {static final long INF(long)1e13;static long qpow(int a,int b){long res1;for(int i0;ib;i) {resres*a;if(resINF) return -1;}return res;}public static void main(String[] args) {Scanner scnew Scanner(System.in);TreeSetLong visnew TreeSet();ListLong listnew ArrayList();int xsc.nextInt(),ysc.nextInt(),zsc.nextInt();//预处理乱纪元for(int i0;i40;i){long aqpow(x,i);if(a-1) break; //大于正无穷for(int j0;j40;j){long bqpow(y,j);if(b-1) break; //大于正无穷for (int k 0; k 40; k) {long cqpow(z,k);if(c-1) break; //大于正无穷long sabc;if(sINF) break; //三者相加大于正无穷if(!vis.contains(s)){list.add(s);vis.add(s);} }}}Collections.sort(list); //集合排序int qsc.nextInt();while(q--0){long ssc.nextLong();long ts1;//找到第一个恒纪元while(vis.contains(t)) t;//找到大于第一个横纪元的乱纪元int idx-1;for (int i 0; i list.size(); i) {if(list.get(i)t){idxi;break;}}//第一个大于t的乱纪元-减去恒纪元System.out.println(t (list.get(idx)-t));// System.out.println(t (vis.ceiling(t1)-t)); //二分} //ceiling相当于lower_bound}
} 题目五充能计划【算法赛】
充能计划【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路
简述题意n个引擎m种宝石q个询问每个询问选出一种宝石p,放到第k个引擎上此时区间[k,min(n,ks[p]-1)]都会放入p这个宝石s数组为每个宝石的充能范围,最后问n种引擎宝石的数量
1.对n个引擎开n个set,对每个询问的合法区间都加入宝石p最后对每个引擎输出set的大小时间复杂度o(n^2),会tle的怎么优化呢
2.可以对每种宝石分组对每一个询问记录区间最后对每种宝石合并区间注意合并区间前要对左端点排序合并区间后用差分记录左右端点位置
3.最后累加差分计算答案
AC_Code:C
#include iostream
#include cstring
#include algorithm
#include vector
#include queue
#includestack
#includecmath
#include unordered_set
#include unordered_map
#includeset
#include mapusing namespace std;typedef long long LL;
typedef pairint,intPII;#define x first
#define y second
#define ls u1
#define rs u1|1
#define all(ss) ss.begin(),ss.end()int const mod1998244353;
int const mod21e97;
int const N2e57;
int const INF0x3f3f3f3f;int T;
int n,m,q;
int s[N];
vectorPIIline[N]; //line[i]:存储宝石i的所有区间
int diff[N];void solve(){scanf(%d%d%d, n, m,q);for(int i1;im;i) scanf(%d,si);while(q--){int p,k; scanf(%d%d,p,k);line[p].push_back({k,min(n,ks[p]-1)});}for(int i1;im;i){if(line[i].empty()) continue;sort(line[i].begin(),line[i].end()); //按左端点排序int lline[i][0].x,rline[i][0].y;//区间合并差分for(PII p:line[i]){if(rp.x) rmax(r,p.y);else{diff[l];diff[r1]--;lp.x;rp.y;}}diff[l]; diff[r1]--;}int ans0; //累加查分计算答案for(int i1;in;i){ ansdiff[i];printf(%d ,ans);}} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T1;//cinT;//scanf(%d,T);init();while(T--){solve();}return 0;
}
AC_Code:java
import com.sun.source.tree.Tree;import java.util.*;public class Main {static int N(int)1e57;static int[] snew int[N];static ListLine[] linenew ArrayList[N];static int[] diffnew int[N];public static void main(String[] args) {Scanner scnew Scanner(System.in);int nsc.nextInt(),msc.nextInt(),qsc.nextInt();for(int i1;im;i) {s[i]sc.nextInt();line[i]new ArrayListLine();}while(q--0){int psc.nextInt(),ksc.nextInt();line[p].add(new Line(k,Math.min(n,ks[p]-1))); //按宝石种类分组}for(int i1;im;i) {if (line[i].isEmpty()) continue;Collections.sort(line[i]); //排序//区间合并差分操作int l line[i].get(0).l, r line[i].get(0).r;for (Line p : line[i]) {if (r p.l) r Math.max(r, p.r);else {diff[l];diff[r 1]--;l p.l;r p.r;}}diff[l];diff[r 1]--;}int ans0; //计算答案for(int i1;in;i){ansdiff[i];System.out.print(ans );}}
}class Line implements ComparableLine{int l,r;public Line(int l, int r) {this.l l;this.r r;}public int compareTo(Line o) {return l-o.l;}
}
题目六大风起兮【算法赛】
大风起兮【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路
1.动态求平均数可以用两个multiset,一个存放一半较小的数一个存放一半较大的数
2.对于每一个询问先删除一个数再计算中位数
AC_Code:C
#include iostream
#include cstring
#include algorithm
#include vector
#include queue
#includestack
#includecmath
#include unordered_set
#include unordered_map
#includeset
#include mapusing namespace std;typedef long long LL;
typedef pairint,intPII;#define x first
#define y second
#define ls u1
#define rs u1|1
#define all(ss) ss.begin(),ss.end()int const mod1998244353;
int const mod21e97;
int const N2e57;
int const INF0x3f3f3f3f;int T;
int n,m;
int a[N];
string s;void solve(){scanf(%d, n);vectorintb;for(int i1;in;i) {scanf(%d,ai);b.push_back(a[i]);}sort(b.begin(),b.end());multisetintmx,mi; //n为奇数mi多放一个数for(int i0;i(n1)/2;i) mi.insert(b[i]); for(int i(n1)/2;in;i) mx.insert(b[i]);scanf(%d, m);while(m--){int x; scanf(%d,x);if(mi.count(a[x])){ //删除小的数那一堆mi.erase(mi.find(a[x]));if(mx.size()mi.size()){int temp*mx.begin();mi.insert(temp);mx.erase(mx.find(temp));}}else{ //删除大的数那一堆mx.erase(mx.find(a[x]));if(mi.size()-mx.size()1){int temp*mi.rbegin();mx.insert(temp);mi.erase(mi.find(temp));}}//输出答案if(mi.size()mx.size()) printf(%.1lf ,*mi.rbegin()*1.0);else printf(%.1lf ,(*mi.rbegin()*mx.begin())/2.0);}} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T1;//cinT;//scanf(%d,T);init();while(T--){solve();}return 0;
}
AC_Code:java 题目七时空追捕【算法赛】
不会写占时更新