第十四届蓝桥杯java真题
第十四届 蓝桥杯java组备赛考纲解读 技巧 查找 深搜宽搜 DFS 动态规划 数论 暴力枚举
官网还没出题目,最新做题网址:
数组分割
当时看错了 以为有奇数就不行,原来是和为奇数不行 沃日!就这道题最简单还没看错了
这种错题解法10%;哭了!!!
import java.util.Scanner;
import java.lang.Math;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int res[]=new int[n+1];
for(int i=1;i<=n;i++){
int m=sc.nextInt();
res[i]=(int)Math.pow(2,m);
for(int j=0;j<m;j++){
int s=sc.nextInt();
//System.out.println(s);
if(s%2!=0){
res[i]=0;
break;
}
}
}
for(int i=1;i<=n;i++){
System.out.println(res[i]);
}
}
}
大佬正解:
很明显实际上就是组合计数,把所有数分成偶数集合和奇数集合
L:表示奇数个数
R:表示偶数个数
当奇数的 个数 为奇数时无解直接输出0即可
只需要枚举s1这个集合的选择,剩下的没有选择的就是s2的元素
偶数集:可以在这个集合里面选择0-R个元素,所有选择方案 sum=C(R,0)+C(R,1)+ C(R,2).....+C(R,R)。展开不难发现最终结果就是sum==2^R;
奇数集:只能在这个集合里面选偶数个数也就是0,2,4,6....L 这个也是展开找规律,展开观察可以发现C(L,0)+C(L,2)+C(L,4)....C(L,L)==2^(L-1)
奇数和偶数的所有选择方案就是 2^R * 2^(L-1)对1000000007取余即可,因为次方次数只有1000左右,无论是快速幂还是暴力均可
注意事项: 多展开,多画图,找到规律再做题,不要做一步看一步,这样大概率是做不出来题的。
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int mod=1000000007;
LL qmi(LL a,LL p){
if(p<0) return 1;
LL res=1;
while (p){
if(p&1) res=res*a%mod;
a=a*a%mod;
p>>=1;
}
return res%mod;
}
int main(){
int T;
cin>>T;
while (T--){
LL n;
cin>>n;
LL l=0,r=0;//l表示奇数个数,r表示偶数个数
int x;
for(int i=1;i<=n;i++){
cin>>x;
if(x%2==0) r++;
else l++;
}
if(l&1){
cout<<0<<endl;
}else{
cout<<qmi(2,l-1)%mod*qmi(2,r)%mod<<endl;//也可以直接写成qmi(2,l-1+r)
}
}
}
我对照他的做的java改版,为啥不对捏
import java.util.Scanner;
import java.lang.Math;
public class Main {
static int mod=1000000007;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int res[]=new int[n+1];
long l=0L,r=0L;//l表示奇数个数,r表示偶数个数
for(int i=1;i<=n;i++){
int m=sc.nextInt();
for(int j=0;j<m;j++){
int s=sc.nextInt();
//System.out.println(s);
if(s%2!=0)
l++;
else
r++;
}
//判断奇数( (a&1)==1);判偶( (a&1) ==0)
if((l&1)==1){
res[i]=0;
}else{
res[i]= (int) (qmi(2L,l-1)%mod*qmi(2L,r)%mod);
//也可以直接写成qmi(2,l-1+r)
}
}
for(int i=1;i<=n;i++){
System.out.println(res[i]);
}
}
static Long qmi(long a,long p) {
if(p<0) return 1L;
long res=1L;
while (p!=0){
if((p&1)==1)
res=res*a%mod;
a=a*a%mod;
p>>=1;
}
return res%mod;
}
}
矩形总面积
考场上就是各种else if判重,具体咋做记不住了
下面这种拿了30%;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr=new int[9];
for(int i=1;i<=8;i++){//x1,y1,x2,y2, x3,y3,x4,y4
arr[i]=sc.nextInt();
}
//(x1, y1) 和(x2, y2) 依次是 R1 的左下角和右上角
int s1=(arr[3]-arr[1])*(arr[4]-arr[2]);
int s2=(arr[7]-arr[5])*(arr[8]-arr[6]);
int s3=0;
//重叠:f1的右上角<f2右&&》f2左
if(arr[4]<arr[8]&&arr[3]<arr[7]&&arr[4]>arr[6]&&arr[3]>arr[5])
s3=(arr[4]-arr[6])*(arr[3]-arr[5]);
//重叠:f2的右上角<f1右&&》f1左
else if(arr[8]<arr[4]&&arr[7]<arr[3]&&arr[8]>arr[2]&&arr[7]>arr[1])
s3=(arr[8]-arr[2])*(arr[7]-arr[1]);
System.out.println(s1+s2-s3);
}
}
蜗牛
感觉得加点条件判断,贪心
拿9分
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nr=new int[n+1];//零点
int[] ar=new int[n+1];//传送起点
int[] br=new int[n+2];//传送终点
for(int i=1;i<n+1;i++){
nr[i]=scanner.nextInt();
}
for(int i=1;i<n;i++){
ar[i]=scanner.nextInt();
br[i+1]=scanner.nextInt();
}
double s=nr[1];//到第一根杆子的0点了
/*
奇数杆子 传送起点的距离和走到下一根0点的距离作比较 点
for(int i=1;i<n+1;i++){
if(nr[i+1]-nr[i]>ar[i])
s+=ar[i];
else s+=(nr[i+1]-nr[i]);
*/
if(n%2!=0){//奇数杆子 n1的0点 ↑ ↓ ↑ ↓ →
for(int i=1;i<n+1;i++){
if(i==n){
s+=nr[i]-nr[i-1];
}else if(i!=n&&i%2!=0){//↑
s+=ar[i]/0.7;
}else if(i!=n&&i%2==0){
s+=br[i]/1.3;
}
}
}else{//偶数杆子 n1的0点 ↑ ↓ ↑ ↓
for(int i=1;i<n+1;i++){
if(i%2!=0){
s+=ar[i]/0.7;
}else if(i%2==0){
s+=br[i]/1.3;
}
}
}
System.out.printf("%.2f",s);
}
}
本文来自博客园,作者:软工菜鸡,转载请注明原文链接:https://www.cnblogs.com/SElearner/p/17676664.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)