• 训练记录day13 (想起来今天还没发博客


    就把做过的题全贴上来把!大概有9题左右?

    P2197 【模板】nim 游戏

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 1e4+10;
    4. const int M = 1e4+10;
    5. const int mod = 19260817;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);
    11. signed main(){
    12. fast
    13. int t;cin>>t;
    14. while(t--){
    15. int n,sum=0;cin>>n;
    16. while(n--){int x;cin>>x;sum^=x;}
    17. if(sum)cout<<"Yes"<<endl;
    18. else cout<<"No"<<endl;
    19. }
    20. return 0^0;
    21. }

     

    P2613 【模板】有理数取余

    感觉一眼乘法逆元+快速幂 因为m是个质数 可是还是学了一下证明

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 1e8+10;
    4. const int M = 1e4+10;
    5. const int mod = 19260817;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    11. void read(long long &x){
    12. int f=1;x=0;char s=getchar();
    13. while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
    14. while(s<='9'&&s>='0'){x=x*10%mod+(s-'0')%mod;s=getchar();}
    15. x=x%mod*f;
    16. }
    17. int qmi(int a,int k, int p){
    18. int res=1;
    19. while(k){
    20. if(k&1)res=res*a%p;
    21. a=a*a%p;
    22. k>>=1;
    23. }
    24. return res;
    25. }
    26. signed main(){
    27. fast
    28. int a,b;
    29. read(a), read(b);
    30. if(!b)cout<<"Angry!"<<Endl;
    31. else cout<<a*qmi(b,mod-2,mod)%mod<<endl;
    32. return 0^0;
    33. }

     

    P4549 【模板】裴蜀定理

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 1e8+10;
    4. const int M = 1e4+10;
    5. const int mod = 1e9+7;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    11. int gcd(int a,int b){return b?gcd(b,a%b):a;}
    12. signed main(){
    13. fast
    14. int n;cin>>n;
    15. int a[22];
    16. for(int i=0;i<n;i++)cin>>a[i];
    17. int t=0;
    18. for(int i=0;i<n;i++){
    19. t=gcd(a[i],t);
    20. }
    21. cout<<abs(t)<<endl;
    22. return 0^0;
    23. }

     

    P3383 【模板】线性筛素数

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 1e8+10;
    4. const int M = 1e4+10;
    5. const int mod = 1e9+7;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    11. int prime[N];
    12. bool st[N];
    13. signed main(){
    14. fast
    15. int n,m,cnt=1;cin>>n>>m;
    16. for(int i=2;i<=n;i++){
    17. if(!st[i])prime[cnt++]=i;
    18. for(int j=1;prime[j]<=n/i;j++){
    19. st[i*prime[j]]=true;
    20. if(i%prime[j]==0)break;
    21. }
    22. }
    23. while(m--){
    24. int x;cin>>x;
    25. cout<<prime[x]<<endl;
    26. }
    27. return 0^0;
    28. }

     

     892. 台阶-Nim游戏

    筛单数^

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int main(){
    4. int n;cin>>n;
    5. int flag=0;
    6. for(int i=1;i<=n;i++){
    7. int x;cin>>x;
    8. if(i%2)flag^=x;
    9. }
    10. if(flag)cout<<"Yes"<<endl;
    11. else cout<<"No"<<endl;
    12. return 0;
    13. }

     893. 集合-Nim游戏

     sg图+记忆化搜索

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 1e4+10;
    4. const int M = 1e4+10;
    5. const int mod = 19260817;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);
    11. int s[N],f[N],n,m;
    12. int sg(int x){
    13. if(f[x]!=-1)return f[x];
    14. set<int>S;
    15. for(int i=1;i<=m;i++)if(x>=s[i])S.insert(sg(x-s[i]));
    16. for(int i=0;;i++)if(!S.count(i))return f[x]=i;
    17. }
    18. signed main(){
    19. fast
    20. cin>>m;
    21. for(int i=1;i<=m;i++)cin>>s[i];
    22. cin>>n;
    23. int ans=0;
    24. memset(f,-1,sizeof f);
    25. for(int i=1;i<=n;i++){
    26. int x;cin>>x;
    27. ans^=sg(x);
    28. }
    29. if(ans)cout<<"Yes"<<endl;
    30. else cout<<"No"<<endl;
    31. return 0^0;
    32. }

     

    894. 拆分-Nim游戏

    sg图+记忆化搜索

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. const int N =110;
    4. int f[N];
    5. int sg(int x){
    6. if(f[x]!=-1)return f[x];
    7. set<int>s;
    8. for(int i=0;i<x;i++){
    9. for(int j=0;j<=i;j++){
    10. s.insert(sg(i)^sg(j));
    11. }
    12. }
    13. for(int i=0;;i++){
    14. if(s.count(i)==0)return f[x]=i;
    15. }
    16. }
    17. int main(){
    18. int n;cin>>n;
    19. int ans=0;
    20. memset(f,-1,sizeof f);
    21. for(int i=0;i<n;i++){
    22. int x;cin>>x;
    23. ans^=sg(x);
    24. }
    25. if(ans)cout<<"Yes"<<endl;
    26. else cout<<"No"<<endl;
    27. return 0;
    28. }

     890. 能被整除的数

    容斥但是通过位运算+spj 就是t>n时 就不能算进去了

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 1e8+10;
    4. const int M = 1e4+10;
    5. const int mod = 19260817;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    11. signed main(){
    12. fast
    13. int n,m,a[20];cin>>n>>m;
    14. for(int i=0;i<m;i++)cin>>a[i];
    15. int ans=0;
    16. for(int i=1;i<1<<m;i++){
    17. int t=1,cnt=0;
    18. for(int j=m-1;j>=0;j--){
    19. if(i>>j&1){
    20. if((long long)t*a[j]>n){
    21. t=-1;
    22. break;
    23. }
    24. t*=a[j];
    25. cnt++;
    26. }
    27. }
    28. if(t!=-1){
    29. if(cnt%2)ans+=n/t;
    30. else ans-=n/t;
    31. }
    32. }
    33. cout<<ans<<endl;
    34. return 0^0;
    35. }

     

    P5656 【模板】二元一次不定方程 (exgcd)

    重点来证明一下这道题啊!

    首先 ax+by=c;

    要是有解肯定是(a,b)|c

    第一个问题解除 所以我们可以再exgcd的时候 求出 (a,b)的同时 求出 一组x,y的特解

    当我们有这一组特解的同时 我们知道

    ax+by=c;

    可以变形为

    a(x+db)+b(y-da)=c;

    显然成立

    而db和da要为整数 那么d|a,d|b 那么d=(a,b)

    最后我们知道当x增大时 y减小

    所以我们求两组边界情况即可!

  • 相关阅读:
    回归模型的算法性能评价
    智能文件夹改名助手,秒级恢复原始文件夹名称,避免繁琐操作!
    FITC荧光素标记琼脂糖Agarose,阿卓糖altrose,聚蔗糖Ficoll,鼠李糖Rhamnose等糖
    netty源码系列之-02_EventLoopGroup和EventLoop
    ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
    python打包相关
    docker技术简介
    leetcode:1838. 最高频元素的频数【排序 + 前缀和 + 二分 + 思维】
    linux内核中听过就能记住的概念
    通信基础(三):多路复用技术
  • 原文地址:https://blog.csdn.net/qq_23852555/article/details/125494882