第 1 题:组队
思路:直接数,注意要不同行不同列
#include <iostream>
using namespace std;
int main()
{
cout<<97+99+99+97+98<<endl;
return 0;
}
第 2 题:不同子串
思路:枚举每一个子串,然后判断是否之前已经生成过
#include <bits/stdc++.h>
using namespace std;
map<string,bool>mp;
int main()
{
int ans=0;
string arr="0100110001010001";
for(int i=0;i<arr.length();i++)
{
for(int j=1;j<=arr.length()-i;j++)
{
string tem=arr.substr(i,j);
if(mp[tem]==false)
{
++ans;
}
mp[tem]=true;
}
}
cout<<ans<<endl;
}
第 3 题:等差数列
思路:求出公差d
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
long long a[N];
int n;
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int d=a[1]-a[0];
for(int i=2;i<n;i++)
{
d=gcd(d,a[i]-a[i-1]);
}
if(a[n-1]==a[0])cout<<n<<endl;
else cout<<((a[n-1]-a[0])/d)+1<<endl;
}