当前位置: 首页 > news >正文

Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)(A~E)

# 补题

A. Wonderful Sticks

题目:

思路:

从左到右,存一下该位置左边最大和最小,如果当前位置是'>'那么下一个位置就是mx+1,'<'就是mi-1,最后在处理一下让数组满足每一个数∈(1,n)。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
ll inf=0x3f3f3f3f3f3f3f3f;
void solve(){int n;cin>>n;string s;cin>>s;vector<int> a(n);int  mx=100;int mi=100;a[0]=100;for(int i=0;i<s.size();i++){mi=min(mi,a[i]);mx=max(mx,a[i]);if(s[i]=='<')a[i+1]=mi-1;else a[i+1]=mx+1;if(i==s.size()-1){mi=min(mi,a[i+1]);mx=max(mx,a[i+1]);}}for(auto it:a)cout<<it-mi+1<<" ";cout<<endl;return;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _;cin>>_;while(_--)solve();return 0;
}

B. Wonderful Gloves

题目:

思路:

考虑最坏的情况,先加上max(l[i],r[i]),然后对于min(l[i],r[i])组成的数组进行排序,然后取最大的k-1个,然后在+1就行了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
ll inf=0x3f3f3f3f3f3f3f3f;
void solve(){int n,k;cin>>n>>k;vector<int> l(n+1);vector<int> r(n+1);ll sm=0;for(int i=1;i<=n;i++)cin>>l[i];for(int i=1;i<=n;i++)cin>>r[i];vector<int> t;for(int i=1;i<=n;i++){sm+=max(l[i],r[i]);t.push_back(min(l[i],r[i]));}sort(t.begin(),t.end());ll t1=0;for(int i=n-1;i>n-1-k+1;i--){t1+=t[i];}cout<<sm+t1+1<<endl;return;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _;cin>>_;while(_--)solve();return 0;
}

C. Wonderful City

题目:

思路:

首先可以发现它的的行和列是独立的,比如1 1,不管怎样选择a数组,这两个位置的数还是会相等。所以分别对行列使用一次dp就行了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
ll inf=0x3f3f3f3f3f3f3f3f;
void solve(){ll n;cin>>n;vector<vector<ll>> h(n+1,vector<ll> (n+1));for(ll i=1;i<=n;i++){for(ll j=1;j<=n;j++)cin>>h[i][j];}vector<ll> a(n+1);vector<ll> b(n+1);for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>b[i];vector<vector<ll>> dp1(n+1,vector<ll> (2,inf));ll res1=inf;dp1[1][1]=a[1];dp1[1][0]=0;for(ll i=1;i<n;i++){for(ll j1=0;j1<2;j1++){for(ll j2=0;j2<2;j2++){for(ll k=1;k<=n;k++){ll t1=h[i][k];ll t2=h[i+1][k];ll add=0;if(j1)t1++;if(j2)t2++,add+=a[i+1];if(t1==t2)break;if(k==n){dp1[i+1][j2]=min(dp1[i+1][j2],dp1[i][j1]+add);}}}}}res1=min(dp1[n][0],dp1[n][1]);ll res2=inf;vector<vector<ll>> dp2(n+1,vector<ll> (2,inf));dp2[1][0]=0;dp2[1][1]=b[1];for(ll i=1;i<n;i++){for(ll j1=0;j1<2;j1++){for(ll j2=0;j2<2;j2++){for(ll k=1;k<=n;k++){ll t1=h[k][i];ll t2=h[k][i+1];ll add=0;if(j1)t1++;if(j2)t2++,add+=b[i+1];if(t1==t2)break;if(k==n){dp2[i+1][j2]=min(dp2[i+1][j2],dp2[i][j1]+add);}}}}}res2=min(dp2[n][0],dp2[n][1]);if(res1==inf||res2==inf)cout<<-1<<endl;else cout<<res1+res2<<endl;return;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll _;cin>>_;while(_--)solve();return 0;
}

D. Wonderful Lightbulbs

题目:

思路:

通过题目可以观察到对一个点操作后的影响,可以发现假如图中的x,y是最开始的灯,那么无论后面怎样操作直线,L1,L2,上的灯的数量一定是奇数个,所以只需要求出满足条件的直线,然后他们的交点就是答案。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
ll inf=0x3f3f3f3f3f3f3f3f;
void solve(){ll n;cin>>n;map<ll,ll> dx,dxy;for(ll i=0;i<n;i++){ll x,y;cin>>x>>y;dx[x]++;dxy[x+y]++;}ll ansx,ansxy;for(auto it:dx){if(it.second%2)ansx=it.first;}for(auto it:dxy){if(it.second%2)ansxy=it.first;}cout<<ansx<<" "<<ansxy-ansx<<endl;return;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll _;cin>>_;while(_--)solve();return 0;
}

E. Wonderful Teddy Bears

题目:

思路:

由题目我们知道我们每一次可以对三个连续的字符进行操作,然后我们可以可以发现,对于一个B,或者P它一次性走两步一定是比较好的,比如PBB->BBP,或者PPB->BPP,所以我们对于哪些BB或者PP我们可以优先移到左边或者右边,然后就会剩下PBPBPB......PB,此时如果有奇数个PB就拿去一个,其它的变成BBPPBBPP .....然后这里其实就是一个等差数列求和(PBPB->BBPP要两次操作别忘了加),最后再把PB里面的B移过去就行了。偶数就一样不过没有剩的PB。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
ll inf=0x3f3f3f3f3f3f3f3f;
void solve(){ll n;cin>>n;string s;cin>>s;s="#"+s;ll ans=0;ll cnt_p=0;ll t=0;stack<char> stk;for(ll i=1;i<=n;i++){if(s[i]=='B'){if(stk.size()){if(stk.top()=='B'){ans+=stk.size()/2;stk.pop();}else{stk.push('B');}}ans+=cnt_p;}else{if(stk.size()){if(stk.top()=='P'){cnt_p+=1;stk.pop();}else{stk.push('P');}}else{stk.push('P');}}}ll add=0;if(stk.size()){if(stk.top()=='P')stk.pop();ll t=stk.size()/2;if(t){if(t%2){t--;t/=2;add+=t*2+t*(t-1)+(stk.size()/2+1)/2;	}else{t/=2;add+=t*2+t*(t-1);}}}cout<<ans+add<<endl;return;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll _;cin>>_;while(_--)solve();return 0;
}

相关文章:

  • 在Ubuntu 18.04下编译OpenJDK 11
  • 【每天一个知识点】主题建模(Topic Modeling)
  • NHANES指标推荐:PhenoAge
  • 【时时三省】(C语言基础)循环的嵌套和几种循环的比较
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 使用Unity Cache Server提高效率
  • 在线查看【免费】 dcm、drawio,dcm wps文件格式网站
  • 基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
  • Maven插件管理的基本原理
  • 基于RK3588+FPGA+AI YOLO全国产化的无人船目标检测系统(二)平台设计
  • 创意Python爱心代码分享
  • 牛行为-目标检测数据集(包括VOC格式、YOLO格式)
  • 10、Context:跨维度传音术——React 19 状态共享
  • 【图问答】DeepSeek-VL 论文阅读笔记
  • 【源码】【Java并发】【AQS】从ReentrantLock、Semaphore、CutDownLunch、CyclicBarrier看AQS源码
  • 关于金碟云星空批号问题
  • 开源脚本分享:用matlab处理ltspice生成的.raw双脉冲数据
  • 第1 篇:你好,时间序列!—— 开启时间数据探索之旅
  • 黑苹果win10和macOS双系统
  • 【MCP】从0到1实现一个MCP Server
  • 执政将满百日,特朗普政府面临国内“三重暴击”
  • 第六次国民体质监测展开,高抬腿俯卧撑等新增运动指标受关注
  • 2025上海半马鸣枪,多个“首次”冲击一城双白金
  • 黄金投资热,成了“财富焦虑”的贩卖场
  • 上海自然博物馆下月开启中国恐龙大展,还在筹备中国古人类大展
  • 中华人民共和国和柬埔寨王国关于构建新时代全天候中柬命运共同体、落实三大全球倡议的联合声明