Codeforces Round 894 (Div. 3)
void solve(){
int n=read(),m=read();
char a[n+1][m+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
string s="vika";
int cnt=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(a[j][i]==s[cnt]){
cnt++;
break;
}
}
}
puts(cnt==4?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
int a[N];
void solve(){
int n=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
vector<int>ans;
ans.push_back(a[1]);
for(int i=2;i<=n;i++){
if(a[i]>=a[i-1])ans.push_back(a[i]);
else{
ans.push_back(1);
ans.push_back(a[i]);
}
}
cout<<ans.size()<<'\n';
for(auto x:ans){
cout<<x<<' ';
}
cout<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
int a[N],cnt[N];
map<int,int>mp;
void solve(){
int n=read();
mp.clear();
for(int i=1;i<=n;i++){
a[i]=read();
mp[a[i]]++;
cnt[i]=0;
}
if(a[1]>n){
cout<<"NO\n";
return ;
}
cnt[n+1]=0;
for(int i=n;i>=1;i--){
cnt[i]=cnt[i+1]+mp[i];
}
int ans=1;
for(int i=1;i<=n;i++){
if(a[i]!=cnt[i]){
ans=0;
}
}
puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
int n;
bool check(int x) {
int tmp=x*(x-1)/2;
// cout<<x<<" "<<tmp<<'\n';
return tmp<=n;
}
int bs1(int l, int r){ //左偏二分
while (l < r){
int mid = (l + r )>> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
int bs2(int l, int r){ //右偏二分
while (l < r){
int mid = (l + r + 1) >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
void solve(){
n=read();
int ans=bs2(0,2648956421);
ans+=(n-ans*(ans-1)/2);
cout<<ans<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
void solve(){
while(pq.size())pq.pop();
int n=read(),m=read(),d=read();
vector<PII>a;
for(int i=1;i<=n;i++){
int x=read();
if(x>0)a.push_back(make_pair(x,i));
}
int sum=0,ans=0;
for(int i=0;i<a.size();i++){
int x=a[i].first,y=a[i].second;
pq.push(x);
sum+=x;
while(pq.size()>m){
int t=pq.top();
pq.pop();
sum-=t;
}
ans=max(ans,sum-d*(y));
}
cout<<ans<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
先用
复杂度为
void solve(){
int w=read(),f=read(),n=read();
vector<int>a(n+1);
int sum=0;
for(int i=1;i<=n;i++){
a[i]=read();
sum+=a[i];
}
vector<int>dp(sum+1);
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=sum;j>=a[i];j--){
dp[j]|=dp[j-a[i]];
}
}
int ans=sum;
for(int i=0;i<=sum;i++){
if(dp[i]){
ans=min(ans,max((i-1+w)/w,(sum-i-1+f)/f));
}
}
cout<<ans<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
一次操作不会改变数字的相对位置,而最大值
可以用
void solve(){
int n=read();
vector<int>a(n+1);
multiset<int> s, d{0};
auto add = [&](int x) {
auto it = s.insert(x);
auto r = next(it);
if (it != s.begin()) {
d.insert(x - *prev(it));
}
if (r != s.end()) {
d.insert(*r - x);
}
if (it != s.begin() && r != s.end()) {
d.extract(*r - *prev(it));
}
};
auto del = [&](int x) {
auto it = s.find(x);
auto r = next(it);
if (it != s.begin()) {
d.extract(x - *std::prev(it));
}
if (r != s.end()) {
d.extract(*r - x);
}
if (it != s.begin() && r != s.end()) {
d.insert(*r - *prev(it));
}
s.erase(it);
};
for(int i=1;i<=n;i++){
a[i]=read();
add(a[i]);
}
int q=read();
while(q--){
int x=read(),y=read();
del(a[x]);
a[x]=y;
add(a[x]);
cout<< *s.rbegin()+*d.rbegin()<<' ';
}
cout<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
本文作者:EdGrass
本文链接:https://www.cnblogs.com/edgrass/p/17671749.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步