分析:大模拟,没什么好说的.我在考场上犯了一个超级低级的错误:while (scanf("%s",s + 1)),导致了死循环,血的教训啊,以后要记住了.

/*
1.没有发生改变,check一下
2.将一位1变成0
3.添一位
4.减一位
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n,len,ss[],b[];
char s[];
bool flag = false; bool check()
{
int res = ;
for (int i = ;i <= n; i++)
if (ss[i] == )
res += i;
if (res % (n + ) == )
return true;
return false;
} bool check2()
{
int res = ;
for (int i = ; i <= n; i++)
if (b[i] == )
res += i;
if (res % (n + ) == )
return true;
return false;
} void print()
{
for (int i = ; i <= n; i++)
printf("%d",ss[i]);
printf("\n");
} void add(int x,int y)
{
memcpy(b,ss,sizeof(ss));
for (int i = n; i > x; i--)
b[i] = b[i-];
b[x] = y;
if (check2())
{
memcpy(ss,b,sizeof(ss));
flag = ;
}
} void eras(int x)
{
memcpy(b,ss,sizeof(ss));
for (int i = x; i <= n; i++)
b[i] = b[i + ];
if (check2())
{
memcpy(ss,b,sizeof(ss));
flag = ;
}
} int main()
{
scanf("%d",&n);
while(scanf("%s",s + ) != EOF)
{
memset(b,,sizeof(b));
len = strlen(s + );
flag = false;
if (abs(n - len) > )
{
printf("-1\n");
continue;
}
for (int i = ; i <= len; i++)
ss[i] = s[i] - '';
if (n == len)
{
if (check()) //
{
print();
continue;
}
for (int i = ; i <= n; i++) //
{
if (ss[i] == )
{
ss[i] = ;
if (check())
{
flag = ;
break;
}
ss[i] = ;
}
}
}
if (flag)
{
print();
continue;
}
if (len == n - )
{
for (int i = ; i <= n + ; i++) //
for (int j = ; j <= ; j++)
{
add(i,j); //i位以及以后都要往后挪1
if (flag)
break;
}
}
if (flag)
{
print();
continue;
}
if (len == n + )
{
for (int i = ; i <= n; i++)
{
eras(i);
if (flag)
break;
}
}
if (flag)
{
print();
continue;
}
printf("-1\n");
} return ;
}

清北学堂模拟赛d4t1 a的更多相关文章

  1. 清北学堂模拟赛day7 数字碰撞

    /* clj:水题别人都满分你不是你就完了,所以说水题一定要细心一点,有这么几个细节:①前导零的处理,全是零的时候要特判②换行要注意,不要多大一行,剩下就是水水的模拟了 */ #include< ...

  2. 清北学堂模拟赛day7 错排问题

    /* 考虑一下已经放回m本书的情况,已经有书的格子不要管他,考虑没有书的格子,不考虑错排有(n-m)!种,在逐步考虑有放回原来位置的情况,已经放出去和已经被占好的格子,不用考虑,剩下全都考虑,设t=x ...

  3. 清北学堂模拟赛day7 石子合并加强版

    /* 注意到合并三堆需要枚举两个端点,其实可以开一个数组记录合并两堆的结果,标程好像用了一个神奇的优化 */ #include<iostream> #include<cstdio&g ...

  4. 清北学堂模拟赛d6t6 棋盘迷宫

    3.棋盘迷宫(boardgame.pas/c/cpp)(boardgame.in/out)时间限制:5s/空间限制:256M[题目描述]小 A 和小 Z 是非常要好的朋友, 而且他们都对迷宫游戏非常有 ...

  5. 清北学堂模拟赛d1t2 火柴棒 (stick)

    题目描述众所周知的是,火柴棒可以拼成各种各样的数字.具体可以看下图: 通过2根火柴棒可以拼出数字“1”,通过5根火柴棒可以拼出数字“2”,以此类推. 现在LYK拥有k根火柴棒,它想将这k根火柴棒恰好用 ...

  6. 清北学堂模拟赛d1t1 位运算1(bit)

    题目描述LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值.例如数字123拥有6的价值,数字999拥有27的价值.假设数字N的价值是K,LYK想找到一个 ...

  7. 清北学堂模拟赛d2t6 分糖果(candy)

    题目描述总共有n颗糖果,有3个小朋友分别叫做L,Y,K.每个小朋友想拿到至少k颗糖果,但这三个小朋友有一个共同的特点:对3反感.也就是说,如果某个小朋友拿到3颗,13颗,31颗,333颗这样数量的糖果 ...

  8. 清北学堂模拟赛d2t5 吃东西(eat)

    题目描述一个神秘的村庄里有4家美食店.这四家店分别有A,B,C,D种不同的美食.LYK想在每一家店都吃其中一种美食.每种美食需要吃的时间可能是不一样的.现在给定第1家店A种不同的美食所需要吃的时间a1 ...

  9. 清北学堂模拟赛d2t4 最大值(max)

    题目描述LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目:这里有一个长度为n的正整数数列ai(下标为1~n).并且有一个参数k.你需要找两个正整数x,y,使得x+k<=y, ...

随机推荐

  1. bzoj3907 网格 & bzoj2822 [AHOI2012]树屋阶梯——卡特兰数+高精度

    题目:bzoj3907:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 bzoj2822:https://www.lydsy.com/Jud ...

  2. JSP-Runoob:JSP 表达式语言

    ylbtech-JSP-Runoob:JSP 表达式语言 1.返回顶部 1. JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建 ...

  3. openstack liberty aio nova 调试

  4. 9.2NOIP模拟题

    9.2 NOIP模拟 题目名称 “与” 小象涂色 行动!行动! 输入文件 and.in elephant.in move.in 输出文件 and.out elephant.in move.in 时间限 ...

  5. JavaScript学习五

    2019-06-02 09:53:42

  6. [转]mysql触发器的作用及语法

    转自:http://blog.csdn.net/cloudday/article/details/6905590 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本 ...

  7. [转]sed常用命令总结

    转自:http://blog.chinaunix.net/uid-26963748-id-3249732.html 一.Sed简介 Sed:Stream Editor  流式编辑器 又称行编辑器,每次 ...

  8. 笔记《精通css》第5章 链接应用样式

    第5章    链接应用样式 1.链接伪类选择器 a : link{    }   (寻找没有被访问过的链接) a : visied{    }(寻找被访问过的链接) 动态伪类选择器 a : hover ...

  9. mysql外键创建失败原因

    引用:http://blog.csdn.net/wangpeng047/article/details/19624351 首先,如果和外键相关的几张表中已经插入了数据,可能导致外键插入的失败 在MyS ...

  10. STL之string篇

    常用代码整理: #include<iostream> #include<cstdio> #include<cstring> #include<string&g ...