zoukankan      html  css  js  c++  java
  • CodeForces 663A Rebus

    A. Rebus
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    You are given a rebus of form ? + ? - ? + ? = n, consisting of only question marks, separated by arithmetic operation '+' and '-', equality and positive integer n. The goal is to replace each question mark with some positive integer from 1 to n, such that equality holds.

    Input

    The only line of the input contains a rebus. It's guaranteed that it contains no more than 100 question marks, integer n is positive and doesn't exceed 1 000 000, all letters and integers are separated by spaces, arithmetic operations are located only between question marks.

    Output

    The first line of the output should contain "Possible" (without quotes) if rebus has a solution and "Impossible" (without quotes) otherwise.

    If the answer exists, the second line should contain any valid rebus with question marks replaced by integers from 1 to n. Follow the format given in the samples.

    Examples
    input
    ? + ? - ? + ? + ? = 42
    
    output
    Possible
    9 + 13 - 39 + 28 + 31 = 42
    
    input
    ? - ? = 1
    
    output
    Impossible
    
    input
    ? = 1000000
    
    output
    Possible
    1000000 = 1000000
    
    
    
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <algorithm>
    #include <math.h>
    #include <stdio.h>
    
    using namespace std;
    char a[1000];
    int n;
    int num1,num2;
    int b[1000];
    int main()
    {
        gets(a);
        int len=strlen(a);
        num1=0;num2=0;
        int cnt=1;int pos;int now=1;b[0]=1;
        for(int i=0;i<len;i++)
        {
            if(a[i]=='+') {b[cnt++]=1;now++;}
            if(a[i]=='-') {b[cnt++]=-1;now--;}
            if(a[i]=='=')
            {
                pos=i;
                break;
            }
        }
        n=0;
        for(int i=pos+1;i<len;i++)
        {
            if(a[i]<='9'&&a[i]>='0')
                n=n*10+a[i]-'0';
        }
        for(int i=0;i<cnt;i++)
        {
            while(now<n&&b[i]<n&&b[i]>0)
                now++,b[i]++;
            while(now>n&&b[i]>-n&&b[i]<0)
                now--,b[i]--;
        }
        if(now!=n)
        {
            printf("Impossible
    ");
            return 0;
        }
        printf("Possible
    ");
        int j=0;
        for(int i=0;i<len;i++)
        {
            if(a[i]!='?')
            printf("%c",a[i]);
            else
            {
                printf("%d",abs(b[j++]));
            }
        }
        cout<<endl;
        return 0;
    }


    
    

  • 相关阅读:
    Linux下安装python
    oracle 12c使用问题总结
    oracle下载地址
    Informatica PowerCenter下载地址
    主流ETL工具
    【phonegap】下载文件
    eclipse显示包的层次关系
    UltraISO 9.6.5.3237
    Windows操作系统设置代理
    wireshark常用的过滤命令
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228678.html
Copyright © 2011-2022 走看看