比赛链接
solution:solution
1.gym/101810-N-Dimensional Grid【找规律】
首先得看懂题意,题目中输入的是维度个数和每个维度的空间大小。
看 2 3这组样例 答案是7
然后把点分成
1 1 ——— 2 1
1 2 ——— 2 2
1 3 ——— 2 3
这两部分 ,从第一个维度的一种,转移到第二个维度
参考博客
则有公式
其中ans【i】表示第i个维度答案,num表示没加当前维度之前所拥有的格子总数,a【i】表示第i个维度的空间大小。
code:

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long  a[120323];
const long long mod  = 1e9+7;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        long long ans  =0 ;
        long long num  = 1;
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            ans =( ans*a[i])%mod;
            ans = (ans+num*(a[i]-1)%mod)%mod;
            num  = (num*a[i])%mod;
        }
        cout<<ans<<endl;

    }
    return 0;
}

2

C. Flip the Bits
题意,求把n翻转成小于n的最大的数所需最小的步数。

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

int n;
int main(int argc, char* argv[]) {
  int t;
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &n);
    printf("%d\n", __builtin_popcount(n ^ (n - 1)));
  }
  return 0;
}

D. Magic Sticks
还是得先看看懂题意:
用n*m格子中的边来完全覆盖整个图,求最小边数。
完全覆盖是指每个格子的四条边至少有一条需要覆盖。

当某一行格子的边数为奇数的时候,类似于图中那个填法就行了
当某一行格子的边数为偶数的时候,直接除以2就行了
这里注意一下(n/2+1)和(n+1)/2的区别就行了
code:

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

int main()
{
    long long  n,m;
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n>>m;
        if(n>m)
            swap(n,m);
        long long tmp = m/2+1;
        long long ans =0 ;
        ans=ans+tmp*(n/2)+((n+1)/2)*(m+1-tmp);
        cout<<ans<<endl;
    }
    return 0;
}