ARC 103

C /\/\/\/

奇偶分类然后就是送分题,代码懒得写了。

D Robot Arms

非常强的二进制拆分,见代码。(题解自己看去

#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("%d\n",(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 Tr/ee

感觉这个 E 比 D 简单,因为我都能想出来。。。

有解当且仅当:

  1. \(\forall 1\le i<n,s_i=s_{n-i}\);
  2. \(s_1=s_{n-1}=1\);
  3. \(s_n=0\)。

把 \(s_i=1\) 的下标拎到一个 \(p_1,p_2,\cdots,p_m\) 里,那么弄一个长度为 \(m\) 的链,并且第 \(i\)(\(2<i\le 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 %d\n",i,i-1);
		for(int j=1;j<=p[i]-p[i-1]-1;j++)printf("%d %d\n",i,++m);
	}
	printf("%d %d\n",c,++m);
	return 0;
}

F Distance Sums

一场四道题的比赛出两道构造题,这合理吗?这合理吗????

上一篇:103_MapReduce编程框架


下一篇:2021-06-17