期望得分:0+40+30=70

实际得分:0+10+10=20

 

2017北京国庆刷题Day4 morning

 题目修改:只能由0变1,只能用一次操作

大模拟

#include<cstdio>
#include<cstring>
using namespace std;
char s[2001];
int len,n;
int cnt[2001];
bool solve1()
{
    if(len!=n) return false;
    int num=0;
    for(int i=0;i<len;i++)
        if(s[i]=='1') num+=i+1;
    if(num%(n+1)==0)
    {
        puts(s);
        return true;
    }
    return false;
}
bool solve2()
{
    if(len!=n) return false;
    int num=0;
    for(int i=0;i<len;i++)
        if(s[i]=='1') num+=i+1;
    for(int i=0;i<len;i++)
        if(s[i]=='1')
        {
            num-=(i+1);
            if(num%(n+1)==0) 
            {
                for(int j=0;j<i;j++) putchar(s[j]);
                putchar('0');
                for(int j=i+1;j<len;j++) putchar(s[j]);
                printf("\n");
                return true;
            }
            num+=(i+1);
        }
    return false;
}
bool solve3()
{
    if(len<=n) return false;
    int num=0;
    for(int i=0;i<len;i++)
        if(s[i]=='1') num+=i+1,cnt[i+1]=cnt[i]+1;
        else cnt[i+1]=cnt[i];
    for(int i=0;i<len;i++)
        if(s[i]=='0')
        {
            num-=(cnt[len]-cnt[i]);
            if(num%(n+1)==0)
            {
                for(int j=0;j<i;j++) putchar(s[j]);
                for(int j=i+1;j<len;j++) putchar(s[j]);
                printf("\n");
                return true;
            }
            num+=(cnt[len]-cnt[i]);
        }
        else
        {
            num-=(cnt[len]-cnt[i+1]);
            num-=(i+1);
            if(num%(n+1)==0)
            {
                for(int j=0;j<i;j++) putchar(s[j]);
                for(int j=i+1;j<len;j++) putchar(s[j]);
                printf("\n");
                return true;
            }
            num+=(cnt[len]-cnt[i+1]);
            num+=(i+1);
        }
    return false;
}
bool solve4()
{
    if(len>=n) return false;
    int num=0;
    for(int i=0;i<len;i++)
        if(s[i]=='1') num+=(i+1),cnt[i+1]=cnt[i]+1;
        else cnt[i+1]=cnt[i];
    for(int i=0;i<len;i++)
    {
        num+=cnt[len]-cnt[i];
        if(num%(n+1)==0)
        {
            for(int j=0;j<i;j++) putchar(s[j]);
            putchar('0');
            for(int j=i;j<len;j++) putchar (s[j]);
            printf("\n");
            return true;
        }
        num+=i+1;
        if(num%(n+1)==0)
        {
            for(int j=0;j<i;j++) putchar(s[j]);
            putchar('1');
            for(int j=i;j<len;j++) putchar(s[j]);
            printf("\n");
            return true;
        }
        num-=(i+1);
        num-=(cnt[len]-cnt[i]);
    }
    if(num%(n+1)==0) { printf("%s",s); printf("0\n");return true; }
    if((num+len+1)%(n+1)==0) { printf("%s",s); printf("1\n"); return true; }
    return false;
}
int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    scanf("%d",&n);
    while(scanf("%s",s)!=EOF)
    {
        len=strlen(s);
        if(solve1()) continue;
        if(solve2()) continue;
        if(solve3()) continue;
        if(solve4()) continue;
        printf("-1\n");
    }
}
View Code

相关文章:

  • 2021-10-12
  • 2021-07-14
  • 2021-12-11
  • 2022-02-08
  • 2021-07-30
  • 2022-02-11
  • 2021-09-16
  • 2022-02-24
猜你喜欢
  • 2021-11-13
  • 2021-07-30
  • 2021-10-25
  • 2021-12-02
  • 2021-10-29
  • 2021-11-04
  • 2022-02-04
相关资源
相似解决方案