zoukankan      html  css  js  c++  java
  • 1.14-1.15 题解

    A.统计字母的题,需要仔细看下题。

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <string.h>
    #include <cctype>
    #include <climits>
    #include <cmath>
    #include <time.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e5+10;
    char ch[N];
    int cnt[266];
    int main()
    {
        scanf("%s",ch);
        for(int i=0;ch[i];i++)
        {
            cnt[ch[i]]++;
        }
        int ans = 0;
        ans = min(cnt['b'],cnt['l']);
        ans = min(min(cnt['u']/2,cnt['s']),min(ans,cnt['r']));
        ans = min(cnt['B'],ans);
        ans = min(cnt['a']/2,ans);
        printf("%d
    ",ans);
        return 0;
    }
    AC代码

    B.筛。 也可以分解(质)因子,复杂度O(n*sqrt(max(si)))。T的同学应该是用了O(max(si))的做法分解因子

    坑点,答案至少为1

    #include<bits/stdc++.h>
    using namespace std;
    int arr[100022];
    int main()
    {
        int n,ans=0,i,j;
        cin>>n;
        for(i=0;i<n;i++)
        {
            int a;
            scanf("%d",&a);
            arr[a]++;
        }
        for(i=2;i<=100000;i++)
        {
            int cum=0;
            for(j=i;j<=100000;j+=i)
            cum+=arr[j];
            ans=max(cum,ans);
        }
        if(arr[1]>0)
        ans=max(ans,1);
        cout<<ans;
        return 0;
    }
    #include<bits/stdc++.h>
    int cnt[100010];
    int main(){
        int n,ans=1;
        scanf("%d",&n);
        for(int k=1;k<=n;k++){
            int x;
            scanf("%d",&x);
            for(int i=2;i<=sqrt(x);i++){//不要用i×i<=x 
                if(x%i==0){
                    while(x%i==0) x/=i;
                    cnt[i]++;
                }
            }
            if(x>1) cnt[x]++;
        }
        for(int k=1;k<=100000;k++) if(ans<cnt[k]) ans=cnt[k];
        printf("%d",ans);
    }
    分解因子

    C.模拟。一旦到达南北极,必须符合: 南极不能向东西南走,北极不能向东西北走。

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <vector>
    #include <map>
    using namespace std;
    typedef long long ll;
    const int N = 1e5+10;
    int main()
    {
        int n;
        cin>>n;
        char ch[10];
        int l;
        int now = 0;
        bool mk = true;
        for(int i=0;i<n&&mk;i++)
        {
            cin>>l>>ch;
            if((ch[0]=='E'||ch[0]=='W'))
                if(now<20000&&now>0) continue;
                else mk = false;
            if(ch[0]=='S')
            {
                
                if(now+l>20000)
                {
                    mk = false;
                }
                now = min(now+l,20000);
            }
            else{
                if(now-l<0)
                {
                    mk = false;
                }
                now = max(0,now-l);
            }
        }
        if(now==0&&mk) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        return 0;
    }
    AC代码

    D.相当于告诉你合法的条件,然后依次缩小区间,发现L>R自然无解,R 足够大则是inf 其他情况随便输出一个答案即可

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <vector>
    #include <map>
    #include <climits>
    using namespace std;
    typedef long long ll;
    const int N = 1e5+10;
    const int MAX = INT_MAX;
    int main()
    {
        int L = INT_MIN,R = INT_MAX;
        int pre=0,now,div;
        int n;
        scanf("%d",&n);
        for(int i = 0; i<n;i++)
        {
            scanf("%d%d",&now,&div);
            if(div==1)
            {
                L = max(L,1900-pre);
            }
            else{
                R = min(R,1899-pre);
            }
            pre+=now;
        }
        if(L<=R)
        {
            if(R<MAX)
                
                printf("%d",R+pre);
            else
                printf("Infinity");
        }
        else{
            printf("Impossible");
        }
        return 0;
    }
    AC代码

    E.简单的搜索题,暴力for循环也能做。4×4的棋盘 ‘.’表示能下,连成至少三个获胜

    #include<iostream>
    using namespace std;
    int main()
    {
        char a[20][20];
        for(int i=6;i<10;i++)
            {
            for(int j=6;j<10;j++)
            {
                cin>>a[i][j];
            }
        }
        for(int i=6;i<10;i++)
            {
            for(int j=6;j<10;j++)
            {
                if(a[i][j]=='.')
                    {
                    if((a[i+1][j]=='x' && a[i+2][j]=='x')||(a[i+1][j]=='x' && a[i-1][j]=='x') ||(a[i-1][j]=='x' && a[i-2][j]=='x') ||
                    (a[i][j+1]=='x' && a[i][j+2]=='x') || (a[i][j+1]=='x' && a[i][j-1]=='x') || (a[i][j-1]=='x' && a[i][j-2]=='x') ||
                    (a[i-1][j+1]=='x' && a[i-2][j+2]=='x') ||(a[i-1][j+1]=='x' && a[i+1][j-1]=='x') || (a[i+1][j-1]=='x' && a[i+2][j-2]=='x')||
                    (a[i-1][j-1]=='x' && a[i-2][j-2]=='x')|| (a[i-1][j-1]=='x' && a[i+1][j+1]=='x')||(a[i+1][j+1]=='x' && a[i+2][j+2]=='x'))
                    {
                         cout<<"YES";
                         return 0;
                     }
                }
            }
        }
        cout<<"NO";
    }
    for循环
  • 相关阅读:
    【BZOJ4676】Xor-Mul棋盘 拆位+状压DP
    【BZOJ4688】One-Dimensional 矩阵乘法
    【BZOJ4704】旅行 树链剖分+可持久化线段树
    【BZOJ4709】[Jsoi2011]柠檬 斜率优化+单调栈
    【BZOJ4711】小奇挖矿 树形DP
    【BZOJ4715】囚人的旋律 DP
    【BZOJ4712】洪水 树链剖分优化DP+线段树
    服务器相关 HTTP 请求错误
    RSA算法
    公钥和私钥解释
  • 原文地址:https://www.cnblogs.com/chdacm/p/6288193.html
Copyright © 2011-2022 走看看