M题M-本题主要考察了找规律_2023牛客寒假算法基础集训营1 (nowcoder.com)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5;
#define endl '\n'
double dp[600][600];
int main(){
int n,m;
cin>>n>>m;
double sum=0.0;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){//一共分的仙贝数
for(int k=0;k<=j;k++){//给单个人分的仙贝数
dp[i][j]=max(dp[i][j],dp[i-1][j-k]+k*1.0/(m-(j-k)));
sum=max(sum,dp[i][j]);
}
}
}
cout<<fixed<<setprecision(12)<<sum<<endl;
}
G题G-鸡格线_2023牛客寒假算法基础集训营1 (nowcoder.com)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5;
#define endl '\n'
ll a[N];
ll f(ll x){
return round(10*sqrt(x));
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n,m;
cin>>n>>m;
ll sum=0;
set<ll>s;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
if(f(a[i])!=a[i])s.insert(i);
// s.insert(a[i]);
}
s.insert(n+1);
while(m--){
int op;
cin>>op;
if(op==1){
int l,r,k;
cin>>l>>r>>k;
int i=l;
while(1){
int nxt=(*s.lower_bound(i));
if(nxt>r)break;
for(int j=1;j<=min(k,20);j++){
sum-=a[nxt];
a[nxt]=f(a[nxt]);
sum+=a[nxt];
}
if(f(a[nxt])==a[nxt])s.erase(nxt);
i=nxt+1;
}
}
else{
cout<<sum<<endl;
}
}
return 0;
}
F题https://ac.nowcoder.com/acm/contest/46800/F
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll f[N],a[N],c[N];
int n,m;//求连通块数量,当两个连通块里均要放炸弹时,无合法方案,有一个联通快要放炸弹时,算该联通快,无炸弹需要放时,算所有联通快
//联通快里算结点个数,以及是否有炸弹
void chushihua(int n){
for(int i=1;i<=n;i++){
f[i]=i;
a[i]=1;
}
}
int find(int x){
return x==f[x]?x:f[x]=find(f[x]);
}
int main(){
cin>>n>>m;
chushihua(n);
while(m--){
int u,v;
cin>>u>>v;
int uu=find(u);
int vv=find(v);
if(uu!=vv) {
f[uu]=vv;
a[vv]+=a[uu];//累加算联通块的大小
}
}
int x=0;
ll sum=0;
for(int i=1;i<=n;i++){
cin>>c[i];
if(c[i]){
x=i;//标记最后有炸弹的点
}
}
if(x==0){
for(int i=1;i<=n;i++){
if(find(i)==i){
sum+=1ll*a[i]*a[i];//计算方案个数,即结点个数的平方(一个结点可以到任意结点包括自己)
}
}
cout<<sum<<endl;
}
else{
for(int i=1;i<=n;i++){
if(c[i]&&find(i)!=find(x)){//如果有炸弹切不止一个联通块里有则输出0
cout<<"0"<<endl;
return 0;
}
}
x=find(x);//有炸弹的点不一定是联通块里最后那个点(即统计所有结点个数的点)
sum=1ll*a[x]*a[x];
cout<<sum<<endl;
}
return 0;
}