ural 1007 Code Words
2013-07-06 09:49
232 查看
题意:
一个发送机可以通过一条隧道发送一些以二进制代码组成的单词。在其尽头 的接收机可以使用特殊技术恢复到最初的单词。 每个单词最初都由0和1组成。所有的单词最初长度都为N(4<=N<=1000)。当穿 过隧道之后单词可能发生以下几种情况之一:
1.任意(一个)0被1取代
2.任意(一个)符号被删除
3.一个符号(0或1)被插入到任何位置.
我们知道最初的单词都具有以下性质: 有1的位置号的总和是N+1的倍数或是0
分析:分几种情况暴力模拟。
Code:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=1010;
char str[maxn],tmp[maxn];
int N,len;
bool Multiple(char s[]){
int sum=0;
for(int i=0;i<N;i++){
if(s[i]=='1')
sum+=i+1;
}
if(sum%(N+1)==0) return true;
return false;
}
int main()
{
scanf("%d",&N);
while(scanf("%s",str)!=EOF){
len=strlen(str);
if(len==N){
if(Multiple(str)) printf("%s\n",str);
else {
for(int i=0;i<len;i++){
if(str[i]=='1'){
for(int j=0;j<len;j++){
if(j==i){
tmp[j]='0';
continue;
}
tmp[j]=str[j];
}
tmp[len]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
}
}
}
}else if(len<N){
for(int i=0;i<N;i++){
int idx=0,j;
for(j=0;j<i;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx++]='0';
for(;j<len;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
idx=0;
for(j=0;j<i;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx++]='1';
for(;j<len;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
}
}else if(len>N){
for(int i=0;i<len;i++){
int idx=0;
for(int j=0;j<len;j++){
if(j==i) continue;
tmp[idx++]=str[j];
}
tmp[idx]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
}
}
}
return 0;
}
一个发送机可以通过一条隧道发送一些以二进制代码组成的单词。在其尽头 的接收机可以使用特殊技术恢复到最初的单词。 每个单词最初都由0和1组成。所有的单词最初长度都为N(4<=N<=1000)。当穿 过隧道之后单词可能发生以下几种情况之一:
1.任意(一个)0被1取代
2.任意(一个)符号被删除
3.一个符号(0或1)被插入到任何位置.
我们知道最初的单词都具有以下性质: 有1的位置号的总和是N+1的倍数或是0
分析:分几种情况暴力模拟。
Code:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=1010;
char str[maxn],tmp[maxn];
int N,len;
bool Multiple(char s[]){
int sum=0;
for(int i=0;i<N;i++){
if(s[i]=='1')
sum+=i+1;
}
if(sum%(N+1)==0) return true;
return false;
}
int main()
{
scanf("%d",&N);
while(scanf("%s",str)!=EOF){
len=strlen(str);
if(len==N){
if(Multiple(str)) printf("%s\n",str);
else {
for(int i=0;i<len;i++){
if(str[i]=='1'){
for(int j=0;j<len;j++){
if(j==i){
tmp[j]='0';
continue;
}
tmp[j]=str[j];
}
tmp[len]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
}
}
}
}else if(len<N){
for(int i=0;i<N;i++){
int idx=0,j;
for(j=0;j<i;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx++]='0';
for(;j<len;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
idx=0;
for(j=0;j<i;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx++]='1';
for(;j<len;j++){
tmp[idx]=str[j];
idx++;
}
tmp[idx]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
}
}else if(len>N){
for(int i=0;i<len;i++){
int idx=0;
for(int j=0;j<len;j++){
if(j==i) continue;
tmp[idx++]=str[j];
}
tmp[idx]='\0';
if(Multiple(tmp)){
printf("%s\n",tmp);
break;
}
}
}
}
return 0;
}
相关文章推荐
- URAL 1646 Godzilla Strikes Back!
- Ural 1073 Square Country (DP)
- Ural1078(经典dp)
- URAL 1297 Palindrome (最长回文子串)
- Ural 1081 Binary Lexicographic Sequence(DP)
- ural 1167. Bicolored Horses(dp)
- URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)
- URAL 1486(二维字符串hash)
- NENU ACM 13级训练赛 2014-11-29(Ural Regional School Programming Contest 2014)
- ural 1353. Milliard Vasya's Function
- Ural 1149. Sinus Dances
- URAL 1084 || Goat in the Garden(同中心矩形与圆的公共面积
- URAL - 1145 Rope in the Labyrinth
- ural 2003. Simple Magic 数论 因数分解
- 【Ural】【1519】Formula 1
- URAL 1924 Four Imps (博弈论 + 规律)
- URAL 1295 Crazy Notions 数学 找规律
- URAL 1721. Two Sides of the Same Coin 二分匹配 构图
- URAL 1762 Search for a Hiding-Place(数学·模拟)
- URAL 1040 Airline Company 构造,思路 难度:2