CodeForces #300 B Quasi Binary

大致题意:给定一个整数,比如32,32=11+11+10。。。给定一个整数n,它可以由0 和1 组成的整数的和组成,求最少需要几个这样0 和 1的整数。比如32至少需要3个。

分析:把输入的这个整数当成字符串处理。比如s=“32”  s[0]=‘ 3 ‘ ,s[1]=‘ 2 ‘;

那么,我们做一个二维数组。a[][];  用来存储这个字符串s

例如“ 32 ” 存储为

1 1

1 1

1 0

例如3451 存储为:

1 1 1 1

1 1 1 0

1 1 1 0

0 1 1 0

0 0 1 0

我们只需要把这个二维数组按行输出并忽略前导0 即可。

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#define max(a,b) a>b?a:b
using namespace std;

int a[10][10];
int main()
{
    string s;
    cin>>s;
    int len=s.size();
    int i,j,k,cou=0;
    for(i=0;i<len;i++)
    {
        cou=max(cou,s[i]-‘0‘);
        for(j=0;j<s[i]-‘0‘;j++)
            a[j][i]=1;
    }//把输入的n按位存储入二维数组a[][];
    //for(i=0;i<cou;i++)
    //{
    //    for(j=0;j<len;j++)
    //        printf("%d ",a[i][j]);
     //   printf("\n");
   // }
    printf("%d\n",cou);
    for(i=0;i<cou;i++)
    {
        int flag=0;
        for(j=0;j<len-1;j++)
            if(a[i][j]==1||flag==1)//忽略前导0 把数组a内的元素按行输出。
            {
                flag=1;
                printf("%d",a[i][j]);
            }
            printf("%d",a[i][j]);
        printf(" ");
    }
    return 0;
}

很多优秀的处理办法不一定拘束于数字,也可以把数字当做字符串来处理,降低思考难度。

时间: 2025-01-02 00:53:49

CodeForces #300 B Quasi Binary的相关文章

Codeforces Round #300 - Quasi Binary(贪心)

Quasi Binary Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description A number is called quasibinary if its decimal representation contains only digits 0 or 1. For example, numbers 0, 1, 101, 110011 - ar

[CF538B] Quasi Binary

目录 Description Input Output Sample Input1 Sample Output1 Sample Input2 Sample Output2 题解 Description A number is called quasibinary if its decimal representation contains only digits 0 or 1. For example, numbers 0, 1, 101, 110011 - are quasibinary an

#300 (div.1 2) B. Quasi Binary

1.题目描述:点击打开链接 2.解题思路:本题利用扫描法解决.一开始想复杂了,把所有的01组成的数字全部都列举了出来,想一个个尝试.结果到最后也没能写成,放弃了.比赛后发现思路其实非常简单.把每一位的数字看做一根柱子的高度,逐层扫描即可.如果第j位的数字大于当前层i,那么这一位设置为1,否则设置为0.可以发现,最终的答案就是输入的数字中最大的那一位数,而设置每一位的值恰好可以利用string来方便的实现. 本题值得学习的地方是max_element函数的和atoi函数的使用. 3.代码: #de

!codeforces 400E Inna and Binary Logic-yy-(位运算)

题意:有n个数存放在数组a1[]中,然后数组a1[]生成数组a2[],a2[]生成a3[].....一直生成an[],公式是ai[k]=ai-1[k]&ai-1[k+1],现在如果把初始数据也就是数组a1[]里的某一个数换成另一个数,求所有数组的总和是多少. 分析:既然这里的数组生成公式里用到了位与运算,那么就用位运算来做了. 把数字写成二进制,公式的意思就是说同一数组的相邻数字的对应二进制位相与生成下一数组的一个数字的对应二进制位.先求出不做改变前的总和,然后每次改变通过替换数字与原数字每一位

Codeforces 551D GukiZ and Binary Operations(矩阵快速幂)

Problem E. GukiZ and GukiZiana Solution 一位一位考虑,就是求一个二进制序列有连续的1的种类数和没有连续的1的种类数. 没有连续的1的二进制序列的数目满足f[i]=f[i-1]+f[i-2],恰好是斐波那契数列. 数据范围在10^18,用矩阵加速计算,有连续的1的数目就用2^n-f[n+1] 最后枚举k的每一位,是1乘上2^n-f[n+1],是0乘上f[n+1] 注意以上需要满足 2^l>k.并且这里l的最大值为64,需要特判. #include <bit

【codeforces #300】EF题解

E. Demiurges Play Again time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Demiurges Shambambukli and Mazukta love to watch the games of ordinary people. Today, they noticed two men who play the

屯题大法好

CF 535C Tavas and Karafs 题目大意:给你一个无限长的等差数列,每次给一个起点L,可以吃T轮,每可以把M个数吃一口(-1),问最大的R使得区间[L,R]被吃完 思路:显然给定一个区间[L,R]后很容易贪心出能不能被吃完,并且发现该性质有单调性也就是如果[L,R]可以吃完,那[L,R-1]也可以,且存在最大的R使得[L,R+1]不满足条件,于是二分一下就可以了 1 #include<iostream> 2 #include<cstdio> 3 #define l

Codeforces Round #300 (A,B,C,D)

题目传送:Codeforces Round #300 A. Cutting Banner 思路:一看题就会错意了,然后一顿猛敲,果不其然的被hack了,然后才发现只需要剪中间那一段就可以了,然后又傻逼得少写一个等号,还是被hack了,心累啊 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #in

Codeforces Round #300

A. Cutting Banner 关键字:[读题][字符串][枚举] 坑点:能不能只减去某一段字符串把剩下的按原来的顺序连起来组成"CODEFORCES",而减下一段"CODEFORCES"是不行的 e.g. "CODEFAAAAORCES"是可行的         而 "AACODEFORCESAA"是不可行的 B. Quasi Binary 题意:给出一个数n,求最少用几个形如"1010"这样只包含'