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;
    }


    
    

  • 相关阅读:
    php 如何提升
    PHP判断客户端是否使用代理服务器及其匿名级别
    前端基础之BMO和DOM
    前端基础之JavaScript
    前端基础之CSS标签样式
    前端基础之CSS选择器
    前端基础之HTML标签
    面向对象之反射 元类
    面向对象之多态以及魔法函数
    面向对象之封装
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228678.html
Copyright © 2011-2022 走看看