Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

Posted crossea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)相关的知识,希望对你有一定的参考价值。

技术图片
链接

签到题,求出位数,然后9*(位数-1)+ 从位数相同的全一开始加看能加几次的个数
#include<bits/stdc++.h>
 using namespace std;

 int main(int argc, char const *argv[])
 {
    int t;
    int y;
    cin>>t;
    int ans = 0;
    while(t--)
    {
        cin>>y;
        ans = 0;
        int weishu = 0;
        int temp = y;
        while(temp>0)
        {
            weishu++;
            temp/=10;
        }
        ans += (weishu-1)*9;
        temp = 1;
        for (int i = 1; i < weishu; ++i)
        {
            temp = temp*10+1;
        }
        for (int i = temp; i <= y; i += temp)
        {
            ans++;
        }
        cout<<ans<<endl;
    }
    
    return 0;
 }

技术图片
链接

思路,用堆来维护所有的偶数,每次取最大的来除以二,但是需要在处理的时候去重。用STL的优先队列就可
#include<bits/stdc++.h>

using namespace std;

int main(int argc, char const *argv[])
{
    //数的数量啊
    //排序一波?
    priority_queue<int> q;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int num;
        int flag = 0;
        for (int i = 0; i < n; ++i)
        {
            cin>>num;
            if (!(num%2)) //不是奇数,插入就行
            {
                q.push(num);
                flag++;
            }
        }
        if(flag)
        {
            int top = q.top();
            int ans = 0;
            int cur = 0;
            q.pop();
            ans++;
            if (!((top/2)%2))
            {
                q.push(top/2);
            }
            while(!q.empty())
            {
                cur = q.top();
                //cout<<cur<<endl;
                q.pop();
                if (cur == top)
                    continue;
                else  //不是重复了哈
                {
                    top = cur;
                    ans++;
                    if (!((top/2)%2))
                    {
                        q.push(top/2);
                    }
                }

            }
            cout<<ans<<endl;
        }
        else
            cout<<"0"<<endl;

        
    }

    return 0;
}

技术图片
技术图片
链接

思考一下,因为two和one,是可能出现连起来出现的,所以先扫描一遍所有的twone这种的,去掉中间的o,然后再扫描一次把剩下的one和two
去掉中间那个字母就行。
#include<bits/stdc++.h>


using namespace std;
char s[150001];

int del[150001];
 int main(int argc, char const *argv[])
 {
    ios::sync_with_stdio(false);
    std::vector<int> a;
    int t;
    cin>>t;
    while(t--)
    {
        cin>>s;
        int ans = 0;
        a.clear();
        //memset(del, 0, sizeof(del));
        int len = strlen(s);
        for (int i = 0; i < len; ++i)
        {
            del[i]=0;
        }
        for (int i = 2; i < len-2; ++i)
        {
            if (s[i]=='o')
            {
                    if (s[i-2]=='t'&&s[i-1]=='w'&&s[i+1]=='n'&&s[i+2]=='e')
                    {
                        //s.erase(i,1);
                        a.push_back(i+1);
                        del[i] = 1;
                        //cout<<i<<" ";
                        ++ans ;
                    }
            }
        }
        for (int i = 1; i <=len-2; ++i)
        {
            if (s[i]=='w')
                {
                    if (s[i-1]=='t'&&s[i+1]=='o'&&!del[i+1])
                    {
                        del[i]=1;
                        a.push_back(i+1);
                        ++ans;
                        //cout<<i<<" ";
                    }
                }
                if (s[i]=='n')
                {
                    if (s[i-1]=='o'&&s[i+1]=='e'&&!del[i-1])
                    {
                        del[i]=1;
                        a.push_back(i+1);
                        ++ans;
                        //cout<<i<<" ";
                    }
                }
        }
        cout<<ans<<endl;
        for (int i = 0; i < ans; ++i)
        {
            cout<<a[i]<<' ';
        }
        cout<<endl;
    }
    

    return 0;
 }

未完待续~

以上是关于Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

cf比赛记录Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

Codeforces Round #606 (Div. 2) E - Two Fairs(DFS,反向思维)

Codeforces Round #606 (Div. 2) D. Let's Play the Words?(贪心+map)

Codeforces Round #436 E. Fire(背包dp+输出路径)