蓝桥杯 第 24 场 强者挑战赛 题解上(1-3题)


 
 

  • 标记名字【算法赛】

一条横幅,在1/N,2/N, 3/N···(N-1)/N的地方标记一次,若之前标记过这则不用再标记,求f(N)=此时新标记的个数。

  • 上思路

读懂题后,重点在于确定该题的思考方向,也就是,新标记的点分子和分母有什么特点。

于是乎,比如N=6时, 1/6,  2/6,  3/6,  4/6,  5/6中,就明白f(N)=这些分数中不可约分的个数(官方一点,1-N中与N互质的个数)。如4/6=2/3,这条线必然以2/3的形式先出现过。  

标准的欧拉函数!

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int xmax=1e6;
int euler_phi(int n)
{
  int ans = n;
  for (int i = 2; i*i <= n; i++)
    if (n % i == 0) {
      ans = ans / i * (i - 1);
      while (n % i == 0) n /= i; 
    }
  if (n > 1) ans = ans / n * (n - 1);
  return ans;
}

void solve(){
    int n;cin>>n;
    int m=euler_phi(n);
    cout<<m<<'\n';
}
signed main()
{
    int T;T=1;
    while(T--){
        solve();
    }
    return 0;
}

  • 奖杯排列【算法赛】

组委会准备了N 个大小不同的奖杯,每个奖杯上都刻着一个数字 ai,代表奖杯的价值。组委需要从这 N 个奖杯中选出一些奖杯,使得这些奖杯的价值,按照它们在原序列中的顺序排列,能够组成一个长度大于 1、公差为 K 的等差数列。
结果对1e9+7取模。

  • 上思路

一个动态规划,只需记录之前以(ai-k)结尾的数列个数。

用map记录,喜欢map。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int xmmm=2e5+10;
const int mod=1e9+7;

signed main()
{
    int n, k;cin>>n>>k;
    map<int, int>p1;
    int ans=0;
    for(int i=1;i<=n;i++){
        int t;cin>>t;
        if(t-k>=1&&p1[t-k]){
            ans+=p1[t-k];
            ans%=mod;
            p1[t]=(p1[t]+p1[t-k])%mod;
        }
        p1[t]++;//表示以t作为等差数列的第一个元素,因为长度为1,所以不计入ans中。
    }
    cout<<ans%mod<<'\n';
    return 0;
}

  • 估算分数【算法赛】

满足⌊F(N)⌋<F(N)<∣F(N)∣, 则这个N合格。
求N的个数。

  • 上思路

N需要满足的条件:

  1. A%(B*N-C)!=0;
  2. B*N<C

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int xmmm=2e5+10;
int a, b, c;
int mm(int x){//若存在N,使x==c-b*N&&c>b*N, 则return 1, 表示ans需要-1;反之则不需要。
    if((c-x)%b==0&&c-x>0)return 1;
    else return 0;
}

signed main()
{
    cin>>a>>b>>c;
    if(b>=c){
        cout<<0<<'\n';
        return 0;
    }
    int m=c%b==0?c/b-1:c/b;
    int ans=m;//初始化ans为m
    for(int i=1;i<=sqrt(a);i++){
        if(a%i==0){
            ans-=mm(i);
            if(i*i!=a)ans-=mm(a/i);
        }
    }
    cout<<ans<<'\n';
    return 0;
}

posted @ 2024-12-25 22:49  devoteeing  阅读(108)  评论(0)    收藏  举报