A
A题链接
水题
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;
using namespace std;
int main()
{
int n;
cin>>n;
int k=n/100;
n=n%100;
int c=n/10;
int f=n%10;
if(k==7||c==7||f==7)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
return 0;
}
B
B题链接
水题,根据题意模拟即可
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;
using namespace std;
int main()
{
int n;
cin>>n;
ll sum=0;
for(int i=1;i<=n;i++)
{
if(i%3==0||i%5==0)
{
continue;
}
sum+=i;
}
cout<<sum;
return 0;
}
范围较小直接暴力即可
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;
using namespace std;
int gcd(int a,int b)
{
return b==0?a:(gcd(b,a%b));
}
ll mapx[201][201];
int main()
{
int n;
cin>>n;
ll sum=0;
for(int k=1;k<=n;k++)
{
for(int j=1;j<=n;j++)
{
mapx[k][j]=gcd(k,j);
}
}
for(int k=1;k<=n;k++)
{
for(int j=1;j<=n;j++)
{
for(int i=1;i<=n;i++)
{
int ans=mapx[k][j];
sum+=mapx[ans][i];
}
}
}
cout<<sum;
return 0;
}
D
D题链接
题意:给你一个字符串,这个字符串中只有R,G,BR,G,BR,G,B。让你找三元组(i,j,k)(i,j,k)(i,j,k)的数量,满足
i
解析:求出R,G,B的数量x,y,z总数即为xyz减去不符合条件的
枚举间距i。j,j+i,j+2*i两两不同则总数减一
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define inf 0x3f3f3f3f
#define pi 3.1415926535898
using namespace std;
char a[5000];
ll x,y,z;
int main()
{
int n,k;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]=='R')
{
x++;
}
else if(a[i]=='G')
{
y++;
}
else
{
z++;
}
}
ll ans=x*y*z;
for(int i=0;i*2<n;i++)
{
for(int j=0;j+2*i<n;j++)
{
if(a[j]!=a[j+i]&&a[j+i]!=a[j+2*i]&&a[j]!=a[j+2*i])
{
ans--;
}
}
}
cout<<ans<<endl;
return 0;
}
E
E题链接
题意:给你n个数,然后每个数的范围为[1,k]。让你求这个序列所有可能的情况时gcd的和k
解析:容斥原理。f[i]为公约数为i的数量。最大公约数为i即N个数均为I的倍数,则有k/i个数。共有(k/i)^n种情况,但是这里面都重复的,最大公约数为2i,3i,4*i…,我们要减去这些序列的数量。所以我们倒着枚举最大公约数就很好处理了。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define inf 0x3f3f3f3f
#define pi 3.1415926535898
using namespace std;
ll f[200010];
const ll mod = 1e9+7;
ll x,y,z;
ll pows(int n,int a)//快速幂
{
ll ans=1;
while(a)
{
if(a&1)
{
ans=1ll*ans*n%mod;
}
n=1ll*n*n%mod;
a>>=1;
}
return ans;
}
int main()
{
int n,k;
cin>>n>>k;
for(int i=k;i>=1;i--)
{
f[i]=pows(k/i,n);
for(int j=2*i;j<=k;j+=i)//容斥
{
f[i]=(f[i]-f[j]+mod)%mod;
}
}
ll ans=0;
for(int i=1;i<=k;i++)
{
ans+=1ll*i*f[i]%mod;//大小乘以个数才等于和
ans%=mod;
}
cout<<ans<<endl;
return 0;
}