写了4题后注意力就没那么集中了,就感觉在划水一般~啊!!好菜啊我
A:Sumo and Keyboard-Cat;
题意:
图片说明
思路:很显然就是求小写转大写或者大写变小写出现的次数。然后统计一下次数就行了,注意如果第一个字符是小写从1开始统计。
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 10;
typedef long long int ll;
void solved(){
    string s;cin>>s;
    int ans = 0;
    if(s[0] >= 'a' && s[0] <= 'z')ans = 1;
    for(int i = 0; i < s.size() - 1; i++){
        if(s[i] >= 'a' && s[i] <= 'z' && s[i + 1] >= 'A' && s[i + 1] <= 'Z')ans++;
        if(s[i] >= 'A' && s[i] <= 'Z' && s[i + 1] >= 'a' && s[i + 1] <= 'z')ans++;
    }
    cout<<ans<<endl;
}
int main(){
    solved();
    return 0;
}

B:Sumo and His Followers
题意:
图片说明
大概意思:有n个任务,每个任务有等待时间,问你怎么排使得平均等待时间最少。
思路:贪心让耗时最小的先执行就行了。排个序,然后扫一次就行。
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 10;
typedef long long int ll;
int a[maxn];
void solved(){
    int n;cin>>n;
    for(int i = 1; i <= n; i++){
        cin>>a[i];
    }
    sort(a + 1, a + 1 + n);
    ll sum = 0;
    for(int i = 1; i <= n; i++){
        sum += a[i] * (n - i);
    } 
    printf("%.2lf\n",sum * 1.0 / n);
}
int main(){
    int t;cin>>t;
    while(t--)
    solved();
    return 0;
}

F:Sumo and Luxury Car
题意:

大概意思:就是说某人有n辆车,它可以从n辆车里面任意选x 个(x>0&&x<=n),组成一个车队,然后再从这个车队任选一辆车自己用,问一共有多少种选法。
思路:
很容易发现要我们求的就是1 * C(n,1) + 2 * C(n,2) + 3 * C(n,3) + ... + n * C(n,n)
但是n比较大,迭代O(n)肯定会超时,所以要将公式化简。
图片说明
图片说明
图片说明
然后快速幂跑一下就行了。
代码:

#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7;
const int N = 2e5 + 10;
typedef long long int ll;
//1 * C(n,1) + 2 * C(n,2) + 3 * C(n,3) + ... + n * C(n,n)
//sigma k * C(n,k) = 2n^(n - 1) 
ll fastpow(ll a,ll b){
    ll res = 1;
    while(b){
        if(b & 1)res = res * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}
void solved(){
    ll n;cin>>n;
    cout<<n * fastpow(2,n - 1) % mod<<endl;
}
int main(){
    int t;cin>>t;
    while(t--)
    solved();
    return 0;
}

L:Sumo and Coins
题意:
图片说明
大概意思:
你有n个硬币,其中a个正面朝上,b个反面朝下,你可以选择任意n-1个硬币翻转任意次,问能否翻转成全0或者全1.
思路:
这题我是猜,证明的话不太会。
我们用0表示正面朝上,1表示反面朝下。
首先考虑偶数。
当n=2,
图片说明
无论a,b为多少都可以得到全0或者全1.
当n = 4;
图片说明
无论a,b为多少都可以得到全0或者全1.
验证完这两个我就猜想n=2,应该输出all。
再考虑奇数
n = 3.
图片说明
我们0的个数是奇数可以得到全0,0的个数是偶数可以得到全1,不妨再验证一个。
n = 5.
图片说明
0的个数是奇数仍旧全0所以猜想应该是正确的,有大佬会严格的证明可以教教我~
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 10;
typedef long long int ll;
void solved(){
    int n,a,b;cin>>n>>a>>b;
    if(n % 2 == 0){
        cout<<"ALL"<<endl;
    }else{
        if(a & 1)cout<<"UP"<<endl;
        else cout<<"DOWN"<<endl;
    }
}
int main(){
    int t;cin>>t;
    while(t--)
    solved();
    return 0;
}

C:Sumo and Virus
题意:
图片说明
思路:模拟,a[i]:第i天已经感染的人数,b[i]:第i天预感染的人数。然后模拟。
代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;
const int maxn = 2e5 + 10;
ll a[maxn];//已感染
ll b[maxn];//预感染 
void solved(){
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    ll x,m,n;cin>>x>>m>>n;
    ll c = 1;
    b[1] = 1;
    for(int i = 8; i <= n; i++){
        a[i] = b[i - 7] + a[i - 1];
        if(i >= 14)a[i] -= b[i - 13];
        if(x * a[i] <= m - c){
            b[i] = x * a[i];
        }else b[i] = m - c;
        c += b[i];
    }
    printf("%lld\n",a[n]);
}
int main(){
    int t;cin>>t;
    while(t--)
    solved();
    return 0;
}