NOIP模拟测试17「入阵曲·将军令·星空」

入阵曲

题解

应用了一种美妙移项思想,

我们先考虑在一维上的做法

维护前缀和$(sum[r]-sum[l-1])\%k==0$可以转化为

$sum[r]\% k==sum[l-1]\%k$开个桶维护一下即可

然后拓展到二维上

把两行之间所有行拍扁看作一维上的区间,

我们枚举两行和行之间所有列开个桶维护

$n^2 m$复杂度

    for(ll i=1;i<=n;i++)for(ll j=1;j<=i;j++){flag[0]=1;for(ll q=1;q<=m;q++){t[q]=(sum[i][q]-sum[j-1][q]+k)%k;cnt+=flag[t[q]];flag[t[q]]++;}for(ll q=1;q<=m;q++)flag[t[q]]=0;}

至于桶里flag[0]=1初始化含义

当你其他%==0的矩阵放进去时本身就符合条件,在桶里找配对之前就构成合法矩阵,这样做统计了所有%=0的情况

当然这样也行

    for(ll i=1;i<=n;i++)for(ll j=1;j<=i;j++){for(ll q=1;q<=m;q++){t[q]=(sum[i][q]-sum[j-1][q]+k)%k;cnt+=flag[t[q]];flag[t[q]]++;}cnt+=flag[0];for(ll q=1;q<=m;q++)flag[t[q]]=0;}

将军令

题解

$45\%$算法

计算k==1

和小胖收皇宫类似,

思考dp数组含义

$f[x][0]$表示被父亲管辖   $f[x][1]$表示被自己管辖   $f[x][2]$表示被自己儿子管辖

f数组转移

若x被父亲管辖,那么儿子必须被自己管辖或者被儿子的儿子管辖

$f[x][0]=\sum\limits_{y}^{y\in son}min(f[y][1],f[y][2])$

若x被自己管辖,那么x转移随意

$f[x][1]=\sum\limits_{y}^{y\in son} min(f[y][1],f[y][2],f[y][0])$

若x被儿子管辖,那么儿子可以被自己管辖或者被儿子的儿子管辖

但如果所有儿子的儿子代价都比选自己代价小,我们需要强制选出一个$f[y][1]-f[y][2]$差值最小的更新

代码稍微体会一下

void dp(ll x){if(!son[x]) {f[x][1]=1;f[x][2]=0x7ffffff;f[x][0]=0;return ;}vis[x]=1;ll sum=0,sum2=0,sum3=0,pan=0,mix=0x7ffffff;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(vis[y]) continue;dp(y);sum+=min(f[y][0],min(f[y][1],f[y][2]));sum2+=min(f[y][2],f[y][1]);sum3+=min(f[y][1],f[y][2]);if(f[y][1]<=f[y][2]) pan=1;else mix=min(mix,f[y][1]-f[y][2]);}f[x][1]=sum+1;f[x][0]=sum2;if(pan==1) f[x][2]=sum3;else f[x][2]=sum3+mix;
}

$75\%$算法

计算k==2

还是思考dp数组含义

如果还是像上一个那样定义要写死

换一种0表示被自己守,1表示被儿子守(至少选了一个儿子),2被孙子守(至少选了一个孙子),3子孙全被覆盖自己没有,4孙子全被覆盖(儿子可以被覆盖可以不被覆盖)自己没有

还是思考转移

被自己守x转移还是随意$f[x][0]=\sum\limits_{y}^{y\in son} min(f[y][0],f[y][1],f[y][2],f[y][3],f[y][4])$

被儿子守x转移比较复杂

儿子需要自保,因为儿子可以管辖自己兄弟,所以随意选,所以可以选到$f[y][3]$

$f[x][1]=\sum\limits_{y}^{y\in son} min(f[y][0],f[y][1],f[y][2],f[y][3])$

也和k==1类似,显然我们还是要选出来一个最小差值

被自己孙子守,那么自己儿子需要自保,$f[y][1],f[y][2],f[y][0]$都满足条件

子孙全被覆盖自己没有,那么就是儿子孙子全被覆盖,儿子本身也要被覆盖,

$f[y][0]$  $f[y][1]$   $f[y][2]$          (显然$f[y][3]$不行)

孙子全被覆盖,那么就是孙子全被覆盖,那么可以是$f[y][3]$,$f[y][1]$,$f[y][0]$,$f[y][2]$

代码稍微体会一下(这个代码有误,我并不能调出来,神奇的是我优化调出来了)

void dp2(ll x){
//1表示被自己守,2表示被儿子,3被孙子,4子孙全有自己无,5孙子全有自己无if(!son[x]){f2[x][4]=0x7fffffff;f2[x][5]=0x7fffffff;f2[x][1]=1;f2[x][2]=0;f2[x][3]=0;return ;}vis[x]=1;ll sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,pan=0,mix1=0x7fffffff,pan2=0,mix2=0x7ffffff;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(vis[y]) continue;dp2(y);sum1+=min(min(f2[y][1],f2[y][2]),min(f2[y][3],min(f2[y][4],f2[y][5])));sum2+=min(min(f2[y][1],f2[y][2]),min(f2[y][3],f2[y][4]));if(f2[y][1]<=f2[y][2]&&f2[y][1]<=f2[y][3]&&f2[y][1]<=f2[y][4])pan=1;elsemix1=min(mix1,f2[y][1]-min(f2[y][2],min(f2[y][3],f2[y][4])));sum3+=min(f[y][1],min(f[y][2],f[y][3]));if(f2[y][2]<=f2[y][1]&&f2[y][2]<=f2[y][3])pan2=1;elsemix2=min(mix2,f2[y][2]-min(f2[y][1],f2[y][3]));sum4+=min(min(f2[y][1],f2[y][2]),f2[y][3]);sum5+=min(min(f2[y][1],f2[y][2]),min(f2[y][3],f2[y][4]));}f2[x][1]=1+sum1;if(pan==1)f2[x][2]=sum2;else f2[x][2]=sum2+mix1;if(pan2==1)f2[x][3]=sum3;else f2[x][3]=sum3+mix2;f2[x][4]=sum4;f2[x][5]=sum5;
}

思考怎么优化

dp数组含义再次转变

$f[x][w]$表示$f$中<=w最小的数

例如$f[x][4]$表示$min(f[x][1],f[x][2],f[x][3],f[x][4],f[x][0])$

转移类似

$f[x][0]=\sum\limits_{y}^{y\in son} f[y][4]  $$ +1$

$f[x][3]=\sum\limits_{y}^{y\in son} f[y][2]  $

$f[x][2]=\sum\limits_{y}^{y\in son} f[y][3]  $$+差值$

$f[x][4]=\sum\limits_{y}^{y\in son} f[y][3]  $

$f[x][1]=\sum\limits_{y}^{y\in son} f[x][4]  $$+差值$

最后1 2 3 4 互相取min具体看代码

再次感受一下

void dp2(ll x){if(!son[x]){f2[x][0]=1;f2[x][1]=f2[x][2]=1;f2[x][3]=f2[x][4]=0;f2[x][1]=0x7fffffff;return ;}vis[x]=1;f2[x][0]=1;f2[x][1]=f2[x][2]=f2[x][3]=f2[x][4]=0;ll pan=0,mix1=0x7fffffff,pan2=0,mix2=0x7ffffff;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(vis[y]) continue;dp2(y);f2[x][0]+=f2[y][4];f2[x][3]+=f2[y][2];f2[x][4]+=f2[y][3];mix1=min(f2[y][0]-f2[y][3],mix1);mix2=min(f2[y][1]-f2[y][2],mix2);}f2[x][1]=f2[x][4]+mix1;f2[x][2]=min(f2[x][3]+mix2,min(f2[x][0],f2[x][1]));f2[x][3]=min(f2[x][3],f2[x][2]);f2[x][4]=min(f2[x][3],f2[x][4]);
//    printf("mix1=%lld 2=%lld x=%lld f[][1]=%lld [2]=%lld [3]=%lld [4]=%lld [0]=%lld\n",mix1,mix2,x,f2[x][1],f2[x][2],f2[x][3],f2[x][4],f2[x][0]);
}

 $100\%$算法

dp我是打不出来

应该会有别的大神打出来dp100分

那么正解是什么神奇的算法呢?

简单贪心!

 

啊啊啊啊啊又是贪心,我又没有看出来它是贪心,awsl,我太菜了

步骤分比正解难的多得多

贪心10分钟改完AC,每次找到最深得节点找它的k级父亲

实现不要想复杂,暴力改,暴力跳即可

你会发现你比dp还要快!!!!!!!!!!!!!!!!!!!

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1010101
ll n,k,t,tot=0,sum1=0,sum2=0,sumji=0,sumou=0,skriller=0;
ll head[A],nxt[A],ver[A],deep[A],son[A],f[A][3],fa[A];
ll f2[A][10];
struct node{ll deep,x;friend bool operator < (node a,node b){return a.deep<b.deep;}
}point[A];
priority_queue<node> q;
bool vis[A];
void add(ll x,ll y){nxt[++tot]=head[x];head[x]=tot;ver[tot]=y;
}
ll read(){ll f=1,x=0;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return f*x;
}
void dfs(ll x,ll de){vis[x]=1;point[x].deep=de;point[x].x=x;q.push(point[x]);for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(vis[y]) continue;dfs(y,de+1);son[x]++;fa[y]=x;}
}
void dp(ll x){if(!son[x]) {f[x][1]=1;f[x][2]=0x7ffffff;f[x][0]=0;return ;}vis[x]=1;ll sum=0,sum2=0,sum3=0,pan=0,mix=0x7ffffff;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(vis[y]) continue;dp(y);sum+=min(f[y][0],min(f[y][1],f[y][2]));sum2+=min(f[y][2],f[y][1]);sum3+=min(f[y][1],f[y][2]);if(f[y][1]<=f[y][2]) pan=1;else mix=min(mix,f[y][1]-f[y][2]);}f[x][1]=sum+1;f[x][0]=sum2;if(pan==1) f[x][2]=sum3;else f[x][2]=sum3+mix;
}
ll find(ll x){ll w=1;while(w<=k){w++;x=fa[x];}return x;
}
void dp2(ll x){if(!son[x]){f2[x][0]=1;f2[x][1]=f2[x][2]=1;f2[x][3]=f2[x][4]=0;f2[x][1]=0x7fffffff;return ;}vis[x]=1;f2[x][0]=1;f2[x][1]=f2[x][2]=f2[x][3]=f2[x][4]=0;ll pan=0,mix1=0x7fffffff,pan2=0,mix2=0x7ffffff;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(vis[y]) continue;dp2(y);f2[x][0]+=f2[y][4];f2[x][3]+=f2[y][2];f2[x][4]+=f2[y][3];mix1=min(f2[y][0]-f2[y][3],mix1);mix2=min(f2[y][1]-f2[y][2],mix2);}f2[x][1]=f2[x][4]+mix1;f2[x][2]=min(f2[x][3]+mix2,min(f2[x][0],f2[x][1]));f2[x][3]=min(f2[x][3],f2[x][2]);f2[x][4]=min(f2[x][3],f2[x][4]);
//    printf("mix1=%lld 2=%lld x=%lld f[][1]=%lld [2]=%lld [3]=%lld [4]=%lld [0]=%lld\n",mix1,mix2,x,f2[x][1],f2[x][2],f2[x][3],f2[x][4],f2[x][0]);
}
void dfs2(ll x,ll fa,ll de){vis[x]=1;if(de==k) return ;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(y==fa) continue;dfs2(y,x,de+1);}
}
int main(){n=read(),k=read(),t=read();
//    printf("%lld\n",k);if(k==0){for(ll i=1,a,b;i<=n-1;i++){a=read(),b=read();}printf("%lld\n",n);return 0;}
/*    if(k==1){for(ll i=1,a,b;i<=n-1;i++){a=read(),b=read();add(a,b);add(b,a);}dfs(1,1);memset(vis,0,sizeof(vis));dp(1);printf("%lld\n",min(f[1][1],f[1][0]));return 0;}
*/    if(k==2){memset(f2,0x3f,sizeof(f2));for(ll i=1,a,b;i<=n-1;i++){a=read(),b=read();add(a,b);add(b,a);}dfs(1,1);memset(vis,0,sizeof(vis));dp2(1);printf("%lld\n",f2[1][2]);return 0;}else{for(ll i=1,a,b;i<=n-1;i++){a=read(),b=read();add(a,b);add(b,a);}dfs(1,1);memset(vis,0,sizeof(vis));while(!q.empty()){ll x=q.top().x;q.pop();if(vis[x]) continue;ll f=find(x);
//            printf("x=%lld f=%lld\n",x,f);dfs2(f,0,0);skriller++;}printf("%lld\n",skriller);}
}

星空

题解

首先如果翻转我们楞翻转一次复杂度最高n那么考虑优化

我们将取反转化为异或

思考$1 xor 1=0$

$0 xor 1=1$

那么取反我们就转化为了$xor 1$

定义差分数组为$b[i]=a[i] xor a[i+1]$

整段区间$xor1$差分(第一次看到异或的差分),我们转化为$l xor1$ $r+1xor1$

我们不可能白白翻转一段全是$1$的

我们翻转至少有$1$个零

翻转两端都有$0$那么就可以看作消去

两端只有一端有$0$那么可以看作移动

那么问题就转化为了如何最少移动消去使所有$0$变为$1$

处理出任意两个点之间消去代价(可以完全背包,把每个操作换成$+ $,$-$ 两个代价)

    for(ll i=1;i<=m;i++)for(ll j=a[i];j<=n;j++)d[j]=min(d[j-a[i]]+1,d[j]);for(ll i=1;i<=m;i++)for(ll j=n-a[i];j;j--)d[j]=min(d[j+a[i]]+1,d[j]);

考虑k很小,然后状压解决把所有点消去代价

    memset(f,0x7f,sizeof(f));f[0]=0;for(ll i=0;i<ci[cnt];i++){for(ll j=0;j<cnt;j++){if(!(ci[j]&i)){for(ll k=j+1;k<cnt;k++){if((!(ci[k]&i))){if(f[i]>100000000) continue;else {
//                            printf(" i=%lld j=%lld k=%lld cij=%lld cik=%lld f=%lld\n",i,j,k,ci[j],ci[k],f[i]);f[i|ci[j]|ci[k]]=min(f[i|ci[j]|ci[k]],f[i]+d[abs(pos[j]-pos[k])]);
//                            printf("f=%lld d=%lld\n",f[i],d[abs(pos[j]-pos[k])]);
                        }}}break;}}}

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 111111
ll b[A],d[A],Xor[A],pos[A],ci[A],f[A],a[A];
ll cnt,m,n,k;
inline void init()
{memset(d,0x3f,sizeof(d));d[0]=0;for(ll i=1;i<=m;i++)for(ll j=a[i];j<=n;j++)d[j]=min(d[j-a[i]]+1,d[j]);for(ll i=1;i<=m;i++)for(ll j=n-a[i];j;j--)d[j]=min(d[j+a[i]]+1,d[j]);for(ll i=1;i<=n;i++){if(Xor[i])pos[cnt++]=i;}
/*    for(ll i=1;i<=n;i++){printf("%lld\n",d[i]);}printf("cnt=%lld\n",cnt);
*/}
inline void dp(){memset(f,0x7f,sizeof(f));f[0]=0;for(ll i=0;i<ci[cnt];i++){for(ll j=0;j<cnt;j++){if(!(ci[j]&i)){for(ll k=j+1;k<cnt;k++){if((!(ci[k]&i))){if(f[i]>100000000) continue;else {
//                            printf(" i=%lld j=%lld k=%lld cij=%lld cik=%lld f=%lld\n",i,j,k,ci[j],ci[k],f[i]);f[i|ci[j]|ci[k]]=min(f[i|ci[j]|ci[k]],f[i]+d[abs(pos[j]-pos[k])]);
//                            printf("f=%lld d=%lld\n",f[i],d[abs(pos[j]-pos[k])]);
                        }}}break;}}}
}
int main(){ci[0]=1;for(ll i=1;i<=30;i++)ci[i]=ci[i-1]<<1/*,printf("ci[%lld]=%lld\n",i,ci[i])*/;scanf("%lld%lld%lld",&n,&k,&m);n++;for(ll i=1,ak;i<=k;i++){scanf("%lld",&ak);b[ak]^=1;}for(ll i=1;i<=n;i++){Xor[i]=b[i-1]^b[i];}for(ll i=1;i<=m;i++){scanf("%lld",&a[i]);}init();dp();printf("%lld\n",f[ci[cnt]-1]);
}

 

转载于:https://www.cnblogs.com/znsbc-13/p/11336022.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解sizeof

1、sizeof返回的是字节个数&#xff0c;内存编址的最小单元是字节。因此&#xff0c;空对象&#xff0c;bool值占用的内存也是一个字节。 2、可以对哪些东西求sizeof ? a、对象和类型。如int a; sizeof(a)&#xff0c; sizeof(int)&#xff0c;二者是等价的。同一类型的对象&a…

java 分析java死锁_Java死锁示例–如何分析死锁情况

java 分析java死锁死锁是两个线程或多个线程永远被阻塞的编程情况&#xff0c;这种情况发生在至少两个线程和两个或更多资源的情况下。 在这里&#xff0c;我编写了一个简单的程序&#xff0c;它将导致死锁情况&#xff0c;然后我们将看到如何对其进行分析。 Java死锁示例 pac…

insert 多条数据 并且具有唯一标识符

DECLARE COUNT INT DECLARE NAME NVARCHAR(10) SET COUNT0 WHILE COUNT<1000 BEGIN SET NAMESYSTEMCAST(COUNT AS NVARCHAR(10)) INSERT INTO dbo.users VALUES (NEWID(),NAME,123123COUNT,DATEADD(DAY,COUNT,2012-12-12),GETDATE()) SET COUNT COUNT 1 END 转载于:http…

Java Message System简介

Java消息系统 在本文中&#xff0c;我将讨论面向消息的中间件 &#xff08;MOM&#xff09;以及JMS如何在Enterprise Java中实现它。 另外&#xff0c;我将讨论适合JMS使用的典型用例以及用于讨论消息传递解决方案的不同术语&#xff0c;例如Publisher / Sender &#xff0c; D…

FLV协议5分钟入门浅析

FLV协议简介 FLV&#xff08;Flash Video&#xff09;是一种流媒体格式&#xff0c;因其体积小、协议相对简单&#xff0c;很快便流行开来&#xff0c;并得到广泛的支持。 常见的HTTP-FLV直播协议&#xff0c;就是使用HTTP流式传输通过FLV封装的音视频数据。对想要了解HTTP-FLV…

问题 1049: [编程入门]结构体之时间设计

题目描述定义一个结构体变量&#xff08;包括年、月、日&#xff09;。计算该日在本年中是第几天&#xff0c;注意闰年问题。输入年月日输出当年第几天样例输入2000 12 31 样例输出366 import java.util.Scanner; public class Main{ public static void main(String args[]){ …

反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化

反序列化 jacksonDatatables是一个jquery插件&#xff0c;用于显示表格信息–它可以增强简单的表或可以使用基于AJAX的数据并以表格形式显示信息。 数据表要​​求来自服务器的数据遵循特定的JSON格式才能在屏幕上显示。 考虑要显示Member实体列表的情况&#xff0c;那么Membe…

NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」

待补 引子 题解 大模拟&#xff0c;注意细节 代码1 #include<bits/stdc.h> using namespace std; int n,m;char a[1005][1005];bool vst[1005][1005]; void solve(int na,int nb) {int ina,jnb,now0;while(1){j;if(a[na][j])break;}while(1){i;if(a[i][nb])break;}for(in…

GC解释:收集器概述

当前版本的HotSpot JVM包括三种类型的垃圾收集器&#xff1a; –串行收集器 –并行收集器 –多数同时收集者 它们都是世代的&#xff0c;这意味着它们利用了堆的划分方式 。 垃圾收集器负责三个主要操作&#xff1a; –查找不再使用的对象 –释放这些对象之后的内存 –…

数据结构之排序五:选择排序

def selectedSort(myList):#获取list的长度length len(myList)#一共进行多少轮比较for i in range(0,length-1):#默认设置最小值得index为当前值smallest i#用当先最小index的值分别与后面的值进行比较,以便获取最小indexfor j in range(i1,length):#如果找到比当前值小的ind…

C#代码规范

1. 引言 本文是一套面向C# programmer 和C# developer 进行开发所应遵循的开发规范。 按照此规范来开发C#程序可带来以下益处&#xff1a; 代码的编写保持一致性&#xff0c; 提高代码的可读性和可维护性&#xff0c; 在团队开发一个项目的情况下&a…

谷歌guava_使用Google Guava进行馆藏创建和不变性

谷歌guava因此&#xff0c;我想看看番石榴提供的一些集合创建模式&#xff0c;以及它提供的某些不可变集合类型。 如果您没有看过我以前的文章&#xff0c;则可能要从这里开始&#xff1a; 番石榴第1部分– MultiMaps 番石榴第2部分– BiMaps 番石榴第3部分–多组 Guava的…

问题 1051: [编程入门]结构体之成绩统计2

题目描述有N个学生&#xff0c;每个学生的数据包括学号、姓名、3门课的成绩&#xff0c;从键盘输入N个学生的数据&#xff0c;要求打印出3门课的总平均成绩&#xff0c;以及最高分的学生的数据&#xff08;包括学号、姓名、3门课成绩&#xff09;输入学生数量N占一行每个学生的…

socket-02

# -- coding: utf-8 --_author__ "HuaQiang Yan" import socketdef handle_request(client):buf client.recv(1024) # 接收请求client.send(bytes("HTTP/1.1 200 OK\r\n\r\n", encodingutf-8))client.send(bytes("Hello World&#xff01;", …

jenkins复制作业_Jenkins分层作业和作业状态汇总

jenkins复制作业您可能知道&#xff0c;Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置詹金斯工作层次的方法。 这是用例&#xff1a; 我们有一个主要的入口工作被调用以启动整个构建过程。 这项工作可以有一个到多个子工作。 …

xaml语言建立首个win8 Metro应用,rss阅读器

本实例是来源msdn的Metro开发文档&#xff0c;按着解说一步步来理解的&#xff0c;修改了一点点&#xff0c;拿了博客园本人的博客作为RSS阅读&#xff0c;本实例用来学习还是可以的 参考文档http://msdn.microsoft.com/zh-cn/library/windows/apps/br211380.aspx#Y909 先看允…

在扩展Spock时输出给定值

Spock是一个Java测试框架&#xff0c;由GradleWare的软件工程师Peter Niederwieser于2008年创建&#xff0c;它可以促进BDD的发展。 利用这个 例如 &#xff0c;一个故事可以定义为&#xff1a; Story: Returns go to stockAs a store owner In order to keep track of stock…

wsgi

wsgi&#xff0c;通用网关接口。相当于在app与web服务&#xff08;socket服务端&#xff09;之间建立统一连接的规范。 真实开发中的python web程序来说&#xff0c;一般会分为两部分&#xff1a;服务器程序和应用程序。服务器程序负责对socket服务器进行封装&#xff0c;并在请…

Java与Python:哪一种最适合您? [信息图]

通过从应用程序中学习企业APM产品&#xff0c;发现更快&#xff0c;更高效的性能监控。 参加AppDynamics APM导览&#xff01; 在软件开发中&#xff0c;很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己&#xff0c;将客观事…

零基础学习java------day11------常用API

API概述 API(application Programming Interface, 应用程序编程接口)&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节 比如我需要在一个程序里面嵌入…