蓝桥杯----2022国C

次林梦叶的小屋 / 2023-05-28 / 原文

《斐波那契与 7》

  写的时候第一次尝试了暴力,跑了一个小时多都没有跑完

  查了一下,大概1s可以跑1e8条指令

  如果真要跑的话 202202011200 ,应该跑到比赛结束应该内跑完(希望电脑不会炸)

 

 暴力还是不合理的,遇到这种情况试一下循环节

 对于斐波那契数列Fn=Fn-1+Fn-2

 所以只要出现了 (a,b)在前面出现过,那么就有循环了

 

  其中我在使用map的时候有几个注意点:

  1.count()的使用方法

    count()是用来查看key出现在map中的次数

    如果map<int,int>mp

    则mp.count(key)

  2.一般不管map定义为全局还是局部,对于未初始化的,其自动都为0(在value的类型为ll,int时)

  

小蓝做实验

  这道题没啥,就是给个文件,我直接灵魂发问:c++咋读写文件来着?

  c++读写文件的方式<------  

    string filename="tar.txt";
    ifstream infile;
    infile.open(filename);
    if (!infile){
        cout<<"error"<<endl;
        return 1; 
    }
    string line;
    while (getline(infile,line))
    {
    }    

 

 《取模》    

  我是真没想到这道题完全写暴力就能满分,我还各种操作然后啥也没有 

    正如完全暴力的方法来思考:

   我们从1~m一个一个枚举数num

   当存在x,y时,说明 n mod num 的结果在之前存在过了

   我们知道n mod 1=0

   n mod 2=0 或 1 ,但是如果n mod 2= 0 那么我们就可以不用继续下去了

   因为0已经在n mod 1 的结果出现过了

      

     同理,如果要继续下去 那么必须 n mod  num =num-1

  代码暴力就行

#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while (t--)
    {
        map<int,bool>mp;
        int n,m;
        cin>>n>>m;
        bool flag=false;
        for (int i=1;i<=m;i++)
        {
            if (mp[n%i])
            {
                flag=true;
                break;
            }
            else mp[n%i]=true;
        }
        if (flag) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;    
}