大佬教程收集整理的这篇文章主要介绍了ARC 103,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
奇偶分类然后就是送分题,代码懒得写了。
非常强的二进制拆分,见代码。(题解自己看去)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cString>
using namespace std;
inlinE int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return x*f;
}
vector<int> v;
void sol(int x,int y)
{
for(int i=0;i<v.size();i++)
{
int s=v[i];
if(abs(X)>abs(y))
{
if(x<0)x+=s,putchar('L');
else x-=s,putchar('R');
}
else
{
if(y<0)y+=s,putchar('D');
else y-=s,putchar('U');
}
}
putchar('n');
}
const int n=1010;
int x[n],y[n],c[2];
int main()
{
int n=read();
for(int i=1;i<=n;i++)x[i]=read(),Y[i]=read(),c[x[i]+Y[i]&1]++;
if(c[0]&&c[1])return puts("-1"),0;
for(int i=30;i>=0;i--)v.push_BACk(1<<i);
if(c[0])v.push_BACk(1);
printf("%dn",(int)v.size());
for(int i=0;i<v.size();i++)printf("%d ",v[i]);putchar('n');
for(int i=1;i<=n;i++)sol(x[i],Y[i]);
return 0;
}
感觉这个 E 比 D 简单,因为我都能想出来。。。
有解当且仅当:
把 (s_i=1) 的下标拎到一个 (p_1,p_2,cdots,p_m) 里,那么弄一个长度为 (m) 的链,并且第 (i)((2<ile m))个点挂上 (p_i-p_{i-1}-1) 个点。这样是 (n-1) 个点,往第 (m) 个点再挂一个即可。
#include<bits/stdc++.h>
using namespace std;
inlinE int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return x*f;
}
const int n=1e5+10;
char s[n];int p[n],c;
int main()
{
scanf("%s",s+1);
int n=strlen(s+1);
if(s[1]=='0'||s[n-1]=='0'||s[n]=='1')return puts("-1"),0;
for(int i=1;i<n;i++)if(s[i]!=s[n-i])return puts("-1"),0;
for(int i=1;i<=n;i++)if(s[i]^48)p[++c]=i;
int m=c;
for(int i=2;i<=c;i++)
{
printf("%d %dn",i,i-1);
for(int j=1;j<=p[i]-p[i-1]-1;j++)printf("%d %dn",i,++m);
}
printf("%d %dn",c,++m);
return 0;
}
一场四道题的比赛出两道构造题,这合理吗?这合理吗????
以上是大佬教程为你收集整理的ARC 103全部内容,希望文章能够帮你解决ARC 103所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。