1.被污染的支票
#include
#include
#include
2.日期统计
#include
#include
#include
3.01串的熵
#include
#include
using namespace std;
int main()
{
int n=23333333;
for(int i=0;i
(注意浮点数,double,以及比较大小时使用1e-4)
4.冶炼金属
#include
using namespace std;
#define ll long long
int main()
{
ll n,a,b,minn,maxx;
maxx=1e9;//要满足最小的
minn=0;//要满足最大的
cin>>n;
for(ll i=0;i>a>>b;
minn=max(minn,a/(b+1)+1);
maxx=min(maxx,a/b);
}
cout
//二分
#include
using namespace std;
int a[10000+5];
int v[10000+5];
int n;
bool check_min(int x)
{
for(int i=1;iv[i])return false;
}
return true;
}
bool check_max(int x)
{
for(int i=1;i>n;
for(int i=1;i>a[i]>>v[i];
}
int L=1,R=1000000000,minn=0;
while(L>1;
if(check_min(mid))
{
minn=mid;
R=mid-1;
}
else L=mid+1;
}
int maxx=0;
L=1,R=1000000000;
while(L>1;
if(check_max(mid))
{
maxx=mid;
L=mid+1;
}
else R=mid-1;
}
cout
5.飞机降落
#include
#include
#include
using namespace std;
struct node
{
int t,d,l;
};
bool ok=0;
vectorv;
vectorvis;
int n;
void dfs(int cnt,int last)
{
if(cnt==n)
{
ok=1;
return;
}
for(int i=0;i=last)//可以降落
{
vis[i]=1;
dfs(cnt+1,max(last,v[i].t)+v[i].l);
vis[i]=0;//恢复
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
v.clear();
vis.clear();
for(int i=1;i>x>>y>>z;
v.push_back({x,y,z});
vis.push_back(0);
}
ok=0;
dfs(0,0);//0架飞机,0需要时间
if(!ok)cout
6.接龙数列
这道题其实本质就是求解出数列中最长的接龙数列,计算出最长的接龙数列长度,数列总长度-最长接龙数列长度等于最少删除次数。这就是一个求最优解的问题,然而看到这道题的数据量可以发现,暴力求解一定会超时,因此考虑动态规划。 动态规划最重要的就是状态转移方程,而这个题目就可以定义状态为当前最长接龙数列长度,则dp[i]就是以i为数字最后一位的最长接龙数列长度,设x为当前数字的第一位(如果为接龙数列,也就是前一位数的最后一位),y为当前数字的最后一位,则转移方程可以写为dp[y]=max(dp[x]+1,dp[y])
#include
using namespace std;
int f[10];//表示在i=0-9中,f[i]为以i数字为连接的最长接龙数列的长度
int main()
{
int n;
cin>>n;
int ans=0;
string s;
for(int i=0;i>s;
int pre=s[0]-'0',nex=s[s.size()-1]-'0';
f[nex]=max(f[nex],f[pre]+1);
ans=max(ans,f[nex]);
}
cout
7.岛屿个数
搜索出所有岛屿,这个不难做到。由于岛屿之间互相隔离,则如果岛屿的一个格子在一个环内,那么整个岛屿也都在环内。遍历所有的岛屿,选中当前岛屿的第一个格子,搜索周围海洋,若能搜索到地图的边界外,则此岛屿不在任何一个环内;否则,此岛屿在某个环内,岛屿数量减一。
#include
#include
#include
#include
using namespace std;
#define pii pair
const int N=100;
int n,m,ans;
vector>vis;
string s[N];
int dx[8]={-1,1,0,0,-1,1,-1,1};
int dy[8]={0,0,-1,1,-1,1,1,-1};
bool inmap(int x,int y)
{
if(xn||ym)return 0;
return 1;
}
//bfs统计岛屿的情况
void bfs(int x,int y)
{
vis[x][y]=1;
queueq;
q.push({x,y});
while(!q.empty())
{
auto t=q.front();
q.pop();
for(int i=0;i>fin(n+1,vector(m+1,0));
fin[x][y]=1;
queueq;
q.push({x,y});
while(!q.empty())
{
auto t=q.front();
q.pop();
//到达边界,证明不在环中
if(t.first==1||t.first==n||t.second==1||t.second==m)return 1;
for(int i=0;i>t;
while(t--)
{
ans=0;
cin>>n>>m;
for(int i=1;i>s[i];
s[i]='2'+s[i];
}
vis=vector>(n+1,vector(m+1,0));
for(int i=1;i
8.子串简写
#include
using namespace std;
int main()
{
int k;
//最小可以简写的长度
cin>>k;
string s;
char st,ed;
cin>>s>>st>>ed;
long long ans=0;
int st_num=0;
for(int i=0,j=k-1;j
(注意规律,开l服务器托管网ong long)
9.整数删除
#include
using namespace std;
//优先队列+双向链表
const int N=5e5+10;
#define ll long long
#define val first
#define pos second
#define pli pair
int n,k;
ll a[N],pre[N],nxt[N];
priority_queue,greater>q;//小根堆
int main()
{
cin>>n>>k;
for(int i=1;i>a[i];
q.push({a[i],i});
pre[i]=i-1;
nxt[i]=i+1;
}
pre[1]=-1;
nxt[n]=-1;
while(k--)
{
pli now;
do{
now=q.top();
q.pop();
}while(a[now.pos]!=now.val);//保证弹出同一个
int PRE=pre[now.pos];
int NXT=nxt[now.pos];
if(PRE!=-1)
{
a[PRE]+=now.val;
q.push({a[PRE],PRE});
nxt[PRE]=NXT;
}
if(NXT!=-1)
{
a[NXT]+=now.val;
q.push({a[NXT],NXT});
pre[NXT]=PRE;
}
a[now.pos]=-1;
}
for(int i=1;i
10.景区导游
//最近公共祖先。倍增做法 (深搜)
#include
#include
#define ll long long
using namespace std;
const int N=1e5+10;
vectore[N],w[N];
int n,k;
ll dep[N],fa[N][20],dist[N],b[N];
void dfs(int u,int father){
fa[u][0]=father;
dep[u]=dep[father]+1;
for(int i=1;i=0;i--){
if(dep[fa[u][i]]>=dep[v])
u=fa[u][i];
}
if(u==v) return v;
for(int i=19;i>=0;i--){
if(fa[u][i]!=fa[v][i]){
u=fa[u][i],v=fa[v][i];
}
}
return fa[u][0];
}
ll sol(int x,int y){
if(!x||!y) return 0;
return dist[x]+dist[y]-2*dist[lca(x,y)];
}
int main(){
cin>>n>>k;
for(int i=1;i>x>>y>>t;
e[x].push_back(y);
e[y].push_back(x);
w[x].push_back(t);
w[y].push_back(t);
}
dfs(1,0);
ll Dis=0;
for(int i=1;i>b[i];
Dis+=sol(b[i],b[i-1]);
}
for(int i=1;i
11.砍树
#include
#include
using namespace std;
const int N=1e5+10;
vectore[N],num[N];
int n,m,dep[N],fa[N][21],s[N],ans;
void dfs(int u,int Fa)
{
dep[u]=dep[Fa]+1;
fa[u][0]=Fa;
for(int i=1;i=0;i--)
{
if(dep[fa[u][i]]>=dep[v])
{
u=fa[u][i];
}
}
if(u==v)return u;
for(int i=20;i>=0;i--)
{
if(fa[u][i]!=fa[v][i])
{
u=fa[u][i];
v=fa[v][i];
}
}
return fa[u][0];
}
void dfs2(int u,int Fa)
{
for(int i=0;i>n>>m;
for(int i=1;i>x>>y;
e[x].push_back(y);
e[y].push_back(x);
num[x].push_back(i);
num[y].push_back(i);
}
dfs(1,0);
for(int i=1;i>a>>b;
s[a]++;s[b]++;s[LCA(a,b)]-=2;
}
dfs2(1,0);
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
本文分享自华为云社区《java代码实现异步返回结果如何判断异步执行完成》,作者: 皮牙子抓饭。 在许多应用程序中,我们经常使用异步操作来提高性能和响应度。在Java中,我们可以使用多线程或者异步任务来执行耗时操作,并且在后台处理过程完成后获取结果。但是,在使用…