Codeforces 851 div2
CodeForces 851 div 2 (ABC)
A (签到)
题意:给定一个数组,只有0和1,问能否找到某个i,使得前i个数的连乘等于后面的数的连乘。
题解:记录数组中2的个数为cnt,奇数无解,遍历数组,当遍历到2的个数等于cnt/2则为答案。
void solve()
{
cin>>n;
cnt[1]=cnt[2]=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
cnt[a[i]]++;
}
if(cnt[2]%2) cout<<-1<<endl;
else
{
int c=0;
for(int i=1;i<=n;i++)
{
if(a[i]==2) c++;
if(c==cnt[2]/2) {cout<<i<<endl;return;}
}
}
}
B
题意 :给一个数N,找到两个数X,Y, 使得X+Y = N且,X与Y的数位和不超过1。
题解 : 当N的当前位为奇数,则其中一个数比另一个数多拿1,当下次遇到奇数时反过来操作就好了。
void solve()
{
cin>>n;
cnt=0;
if(n%2==0) {cout<<n/2<<" "<<n/2<<endl;return;}
int ans1=0,ans2=0,ok=1;
while(n) a[++cnt]=n%10,n/=10;
while(cnt)
{
int x=a[cnt];
if(x%2==0) ans1=ans1*10+x/2,ans2=ans2*10+x/2;
else if(ok) ans1=ans1*10+(x+1)/2,ans2=ans2*10+x/2,ok=0;
else ans1=ans1*10+x/2,ans2=ans2*10+(x+1)/2,ok=1;
cnt--;
}
cout<<ans1<<" "<<ans2<<endl;
}
C(构造)
题意:给定一个n,要从1~2n中选出n个数对,每个数对p[i]={xi,yi},si= xi+yi,问是否可以构造出n个数对,使得s1 = s2-1,s2 = s3-1,以此类推。
题解:看样例可以得出偶数无解,在手算了几个数后找到了规律。
n=5 : {1,10},{2,8},{3,6},{4,9},{5,7} -> 11,10,9,13,12
n=7 : {1,14},{2,12},{3,10},{4,8},{5,13},{6,11},{7,9} ->15 14 13 12 18 17 16
void solve()
{
cin>>n;
if(n%2==0) {cout<<"NO"<<endl;return;}
int l1=2*n,l2=l1-1;
for(int i=1;i<=n;i++)
{
if(i<=(n+1)/2) p[i]={i,l1},l1-=2;
else p[i]={i,l2},l2-=2;
}
cout<<"YES"<<endl;
for(int i=1;i<=n;i++) {cout<<p[i].x<<" "<<p[i].y<<endl;}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)