Codeforces Round #843 (Div. 2) A~E

A. Gardener and the Capybaras

这道题目就是想让我们输出三个字符串,然后又一个要求就是中间这个字符串具有最值(最大或最小)的字典序

这里需要注意一下,这个字符串里面只有 a , b , 那我们就先判断第一种情况最小的情况 :

for(int i = 1 ; i < s.size() - 1 ; i ++ )
{
    if(s[i] == 'a')
    {
        cout << s.substr(0 , i) << " " << s[i] << " " << s.substr(i + 1) << "\n"; // ababbab ... , a ,ababbbba ... 在这里 a 就是字典序最小
        goto aim;
                
    }
}

还有一个最大的情况 :

cout << s[0] << " " << s.substr(1 , s.size() - 2) << " " << s[s.size() - 1] << "\n";

所以和在一块写就可以写出这道题

ACcode

void solve()
{
    ios;
    int t;
    cin >> t;
    aim : while(t -- )
    {
        
    
        string s;
        cin >> s;
        for(int i = 1 ; i < s.size() - 1 ; i ++ )
        {
            if(s[i] == 'a')
            {
                cout << s.substr(0 , i) << " " << s[i] << " " << s.substr(i + 1) << "\n";
                goto aim;
                
                
            }
        }
        cout << s[0] << " " << s.substr(1 , s.size() - 2) << " " << s[s.size() - 1] << "\n";
    }
}

B. Gardener and the Array

这个题目是一道按位计算,但是我们可以通过理解题目获取关键信息,我们其实是要记录数字出现的次数,若数字出现次数为一,我们就可以知道结果等价为0

void solve()
{
    int n; 
   cin >> n; map<int, int> cnt; // 记录每个位的出现次数 vector<int> v[n+1]; //记录每个数为1的位数 for(int i=1;i<=n;i++) { int k; cin >> k; for(int j=1;j<=k;j++) { int x; cin >> x; v[i].push_back(x); cnt[x]++; } } for(int i=1;i<=n;i++) { int flag = 1; for(auto it: v[i]) { if(cnt[it] == 1) // 如果仅出现一次的话,去除这个数之后,在这一位上就只能为0,不满足要求 { flag = 0; break; } } if(flag == 1) { cout << "Yes\n"; return; } } cout << "No\n"; }

C. Interesting Sequence

这个题目其实就是先把数字先化为二进制,然后找到最早1出现的位置然后进行一个标记,然后就可以进行计算了,若最后结果是小于0,我们就输出“-1” ,否则输出对应结果

void solve()
{
    int t;
    cin >> t;
    while(t -- )
    {
        int flag = 0;
        int n , m;
        cin >> n >> m;
        int k = n;
        while((n & k) != m)
        {
            k += (k & (-k));
            if(k >= 0)
            {
                continue;
            }
            cout << "-1" << "\n";
            flag = 1;
            break;
            
        }
        if(flag == 0)
        {
            cout << k << "\n";
        }
    }
}

 

posted @ 2023-01-11 00:09  AK梦  阅读(114)  评论(0)    收藏  举报