IAEPC Preliminary Contest (Codeforces Round 999, Div. 1 + Div. 2)
B. Kevin and Geometry
- vector的删除,无论是删除单个元素还是区间,一定是传入迭代器,而且区间一定是左闭右开区间
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a.begin(),a.end());
reverse(a.begin(),a.end());
int maxn=0;
for(int i=1;i<a.size();i++)
{
if(a[i]==a[i-1])
{
maxn=a[i];
a.erase(a.begin()+i-1,a.begin()+i+1);
break;
}
}
bool f=false;
for(int i=0;i+1<a.size();i++)
{
if(a[i]-a[i+1]<2*maxn)
{
f=true;
cout<<maxn<<" "<<maxn<<" "<<a[i+1]<<" "<<a[i]<<"\n";
break;
}
}
if(f==false)
{
cout<<"-1\n";
}
}
return 0;
}
C. Kevin and Puzzle
- "no two liars can stand next to each other"意味着诚实者之前的另一个诚实者最多与其隔一个位置,提供了状态转移的可靠条件
#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
int a[200005],b[200005];
int f[200005][2];
int n,ans;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=i-a[i];
}
f[0][1]=1;
for(int i=1;i<=n;i++)
{
f[i][0]=f[i-1][1];
if(i==1)
{
f[i][1]=(b[i]==1);
}
else
{
f[i][1]=f[i-1][1]*(b[i-1]==b[i]-1)+f[i-1][0]*(b[i-2]==b[i]-1);
f[i][1]%=mod;
}
}
cout<<(f[n][0]+f[n][1])%mod<<"\n";
}
return 0;
}
D. Kevin and Numbers
- 正难则反。合并缺乏目标,但拆分有
#include <bits/stdc++.h>
using namespace std;
int a[200005],b[200005];
map<int,int>q;
int n,m;
bool calc(int x)
{
if(m>n||x==0)
{
return false;
}
auto it=q.find(x);
if(it!=q.end())
{
q[x]--;
if(q[x]==0)
{
q.erase(it);
}
return true;
}
else
{
m++;
if(x%2==0)
{
return calc(x/2)&calc(x/2);
}
else
{
return calc(x/2)&calc((x+1)/2);
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
q.clear();
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
q[a[i]]++;
}
for(int i=1;i<=m;i++)
{
cin>>b[i];
}
int M=m;
bool f=true;
for(int i=1;i<=M;i++)
{
f=(f&calc(b[i]));
if(f==false)
{
break;
}
}
if(q.empty())
{
cout<<"Yes\n";
}
else
{
cout<<"No\n";
}
}
return 0;
}
E. Kevin and And
- 直接贪心是不对的。因为消2次的最优解未必包含消1次的最优解
- C++ accumulate:对范围内的元素求和或折叠
- int __builtin_ctz(unsigned int x) consecutive、tail、zero 可以辅助位运算递推
- 自定义优先队列的比较函数,一定是lambda表达式!
#include <bits/stdc++.h>
using namespace std;
int a[100005];
int f[1030],g[100005][15],id[100005];
struct t
{
int delta;
int i;
};
auto cmp=[](t a,t b)
{
if(a.delta!=b.delta)
{
return a.delta<b.delta;
}
return a.i<b.i;
};
priority_queue<t,vector<t>,decltype(cmp) >q(cmp);
int n,m,k;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
for(int j=1;j<=m;j++)
{
g[i][j]=a[i];
}
id[i]=0;
}
long long sum=accumulate(a+1,a+n+1,0ll);
vector<int>b(m);
for(int i=0;i<m;i++)
{
cin>>b[i];
}
f[0]=INT_MAX;
for(int i=1;i<(1<<m);i++)
{
int x=__builtin_ctz(i);
f[i]=f[i^(1<<x)]&b[x];
for(int j=1;j<=n;j++)
{
int cnt=__builtin_popcount(i);
g[j][cnt]=min(g[j][cnt],a[j]&f[i]);
}
}
for(int i=1;i<=n;i++)
{
q.push((t){a[i]-g[i][1],i});
}
while(k--&&q.size())
{
t n1=q.top();
q.pop();
int i=n1.i;
id[i]++;
sum=sum-n1.delta;
a[i]=a[i]-n1.delta;
if(id[i]<m)
{
q.push((t){a[i]-g[i][id[i]+1],i});
}
}
while(q.size())
{
q.pop();
}
cout<<sum<<"\n";
}
return 0;
}
F1. Kevin and Binary String (Easy Version)
#include <bits/stdc++.h>
using namespace std;
string s,t;
int ans;
int tmp[400005];
int con(int p)
{
for(int i=p;i<s.size();i++)
{
if(tmp[i])
{
i=i+tmp[i]-1;
continue;
}
if(s[i]!=s[p])
{
return i-p;
}
}
return s.size()-p;
}
bool solve(int p)
{
if(p>=s.size())
{
return true;
}
if(s[p]==t[p])
{
return solve(p+1);
}
if(p>0&&s[p]==s[p-1])
{
return false;
}
int l=con(p);
if(p+l==s.size())
{
return false;
}
int len=con(p+l);
ans++;
for(int j=p;j<p+len;j++)
{
if(t[j]!=t[p])
{
return false;
}
}
for(int j=0;j<min(l,len);j++)
{
swap(s[p+j],s[p+len+l-1-j]);
}
tmp[p+len]=l;
return solve(p+len);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
cin>>s>>t;
for(int i=0;i<s.size();i++)
{
tmp[i]=0;
}
ans=0;
if(!solve(0))
{
cout<<"-1\n";
}
else
{
cout<<ans<<"\n";
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2024-01-21 [IOI2008] Island
2024-01-21 D.Operator Precedence