CF 150&&152 div 2

#150上次做了忘写解题报告了,不过也因为做的很烂,最近想回过头来重新做一遍。

#152昨天晚上做的,做的也很烂,最近熬夜熬得扛不住了。

先把文章写这,做完了补上代码,也算是个提醒吧。

round #150

A。不贴了,太水了。

B。

ll n;
set<int>ss;
void dfs(ll x,int y,int z)//x 为构造的数,y,z分别为2个数字,就是用y和z 2个数字构造的x.
{
    if(x>n)return ;
    ss.insert(x);
    if(x==0&&y==0&&z==0)return ;
    if((x==0&&y==0))
    {
        dfs(x+z,y,z);
    }
    else if(x==0&&z==0)
    {
        dfs(x+y,y,z);
    }
    else
    {
        dfs(x*10+y,y,z);
        dfs(x*10+z,y,z);
    }
}
void solveB()
{
    cin>>n;
    for(int i=0; i<10; i++)
        for(int j=0; j<10; j++)
            dfs(0,i,j);
    cout<<ss.size()-1<<endl;
}
C

D

E

round #152

A,水题。

B。一开始想是JAVA爆搞,因为最多是210次循环,以为能搞,没想到还是TLE了,因为JAVA大数的运算实在太费时间了。一个pow(10^5)估计就超时了。

然后打了个4-100位的表,发现最后3位是有循环节的。分别是50,80,170,20,200,110。

接下来就很简单了。

string aa[]={"50","80","170","20","200","110"};
void solveB()
{
    int n;
    cin>>n;
    if(n<=2)
    cout<<-1<<endl;
    else
    {
        if(n==3)
        cout<<210<<endl;
        else
        {
            int l=n-1-aa[(n-4)%6].size();
            cout<<1;
            for(int i=0;i<l;i++)
            cout<<0;
            cout<<aa[(n-4)%6]<<endl;
        }
    }
}
C

D

E

太水了,赶紧把其他题A了。。。



你可能感兴趣的:(CF 150&&152 div 2)