• 浙江省赛2019


    F - Abbreviation

     ZOJ - 4105 

    签到;

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
    #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
    #define pb push_back
    #define fi first
    #define se second
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ldb;
    const double PI=acos(-1.0);
    const int inf=0x3f3f3f3f;
    const ll INF=0x3f3f3f3f3f3f3f3fll;
    const int eps=1e-9;
    const ll mod=1e9+7;
    int rd() {
      int x=0,w=1;
      char ch=0;
      while (ch<'0'||ch>'9'){if (ch == '-') w=-1;ch = getchar();}
      while (ch>='0'&& ch <='9'){x=x * 10+(ch-'0');ch = getchar();}
      return x*w;
    }
    const int maxn=1e6;
    int main(){
        int t;
        
        scanf("%d",&t);
        while(t--){
        string ans,s;
        cin>>s;
        int len=s.size();
        ans+=s[0];
        for(int i=1;i<len;i++){
        if(s[i]=='a'||s[i]=='e'||s[i]=='i'||
        s[i]=='y'||s[i]=='o'||s[i]=='u') 
        continue;
        ans+=s[i];
        
        }
        
        cout<<ans<<endl;
        }
        
        return 0;    
    }
    View Code

    G - Lucky 7 in the Pocket

     ZOJ - 4106 

    签到

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
    #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
    #define pb push_back
    #define fi first
    #define se second
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ldb;
    const double PI=acos(-1.0);
    const int inf=0x3f3f3f3f;
    const ll INF=0x3f3f3f3f3f3f3f3fll;
    const int eps=1e-9;
    const ll mod=1e9+7;
    int rd() {
      int x=0,w=1;
      char ch=0;
      while (ch<'0'||ch>'9'){if (ch == '-') w=-1;ch = getchar();}
      while (ch>='0'&& ch <='9'){x=x * 10+(ch-'0');ch = getchar();}
      return x*w;
    }
    const int maxn=1e5+5;
    
    int main(){
        int n,t;
        scanf("%d",&t);
        while(t--){
        scanf("%d",&n);
        int m=n;
        for(m=n; ;m++){
        if(m%7==0&&m%4!=0){
        break; 
        }
        
        }
        printf("%d
    ",m);
        }
        
        return 0;    
    }
    View Code

    I - Fibonacci in the Pocket

     ZOJ - 4108 

    题意:就是给你a,b;然后让你求二者之间斐波那契之和的奇偶;但数据达到了1e1000

    考虑这样做,斐波那契是 奇数,,奇数,偶数;然后只要看看a,b在第几位就好了;

    1 1 或者2 2或者2 0 或者0 1 就是1;其他情况都是0;

    这里我犯了一个傻逼错误,就是3%3肯定是0呀;注意一下就好了

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
    #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
    #define pb push_back
    #define fi first
    #define se second
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ldb;
    const double PI=acos(-1.0);
    const int inf=0x3f3f3f3f;
    const ll INF=0x3f3f3f3f3f3f3f3fll;
    const int eps=1e-9;
    const ll mod=1e9+7;
    int rd() {
      int x=0,w=1;
      char ch=0;
      while (ch<'0'||ch>'9'){if (ch == '-') w=-1;ch = getchar();}
      while (ch>='0'&& ch <='9'){x=x * 10+(ch-'0');ch = getchar();}
      return x*w;
    }
    const int maxn=1e6;
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
        string a,b;
        cin>>a>>b;
        ll sum1=0,sum2=0,x,y;
        int len1=a.size();
        for(int i=0;i<len1;i++){
        sum1+=a[i]-'0';
        }
    
        int len2=b.size();
        for(int i=0;i<len2;i++){
        sum2+=b[i]-'0';
        }
        if(sum1>sum2)swap(sum1,sum2);
        x=sum1%3;
        y=sum2%3;
    //    cout<<"test:"<<endl; 
    //    cout<<sum1<<" "<<sum2<<endl;
            if(x==1&&y==1&&sum2>sum1
        ||x==2&&y==2&&sum2>sum1||x==2&&y==0
        ||x==0&&y==1)puts("1");
        else puts("0");
     
        } 
        
        return 0;    
    }
    View Code

    H - Singing Everywhere(学到许多)

     ZOJ - 4107 

    题意:就是给个序列,噪音点满足   a[i]>a[i-1]&&a[i]>a[i+1]   ;你最多可以删除一个点,问你怎么做使得噪音点最小;

     做法:开始想暴力做法,就是枚举每一个数,试一试他的噪音点最小值,那当然是T了;

    这题让我明白了 前缀和的用法:

    就比如说,你要频繁求一个区间的某个值的和,用暴力做法肯定是要扫一遍,这应该算是用空间换时间的思想吧;

    就是我用一个sum存每一个节点前面待求值的和 然后两者相减即可;

    那这题怎么想呢?

    你要把一个点踢掉,那这个   sum[i-2]+sum[n]-sum[i+1]  必然是去掉i这个点的情况和;

    如果 a[i-1]>a[i-2]&&a[i-1]>a[i+1]  说明左边又构成一个新点;

    如果  a[i+1]>a[i-1]&&a[i+1]>a[i+2]  说明右边又构成一个新点;

    加一下就好了;

    然后处理好边界值,从 2到n-1枚举;

    这题卡0x3f3f3f3f;应该用0x7fffffff处理;

    #include<bits/stdc++.h>
    #define rep(i,j,k)  for(int i=(int)j;i<=(int)k;i++)
    #define per(i,j,k)  for(int i=(int)k;i>=(int)j;i--)
    using namespace std;
    typedef long long ll;
    const ll INF=0x3f3f3f3f3f3f3f3fLL;
    const int inf=0x7fffffff;
    const int maxn=1e5+10;
    int sum[maxn],a[maxn];
    int main(){
        int n,t;
        scanf("%d",&t);
        while(t--){
        memset(sum,0,sizeof sum); 
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        if(n<3){
        puts("0");
        continue;
        }
        a[i]>a[i-1]&&a[i]>a[i+1]
         a[0]=a[n+1]=inf;
         sum[0]=0;
        for(int i=1;i<=n;i++){
        sum[i]=sum[i-1]+(a[i]>a[i-1]&&a[i]>a[i+1]);
          }    
        int ans=sum[n];
        if(a[2]>a[1]&&a[2]>a[3])ans=min(ans,sum[n]-1);
         if(a[n-1]>a[n]&&a[n-1]>a[n-2])ans=min(ans,sum[n]-1);
        for(int i=2;i<n;i++){
        
        ans=min(ans,sum[n]-sum[i+1]+sum[i-2]+(a[i-1]>a[i-2]&&a[i-1]>a[i+1])+(a[i+1]>a[i-1]&&a[i+1]>a[i+2]));
        
        }
        printf("%d
    ",ans);
        }
        return 0;
    }
    View Code

    待更新;

    想的太多,做的太少;
  • 相关阅读:
    58. 最后一个单词的长度
    53. 最大子序和
    50. Pow(x, n)
    35. 搜索插入位置
    28. 实现 strStr()
    leetcode 27. 移除元素
    leetcode 26. 删除排序数组中的重复项
    leetcode 21. 合并两个有序链表
    20. 有效的括号
    多线程案例_循环打印_设计4个线程...
  • 原文地址:https://www.cnblogs.com/littlerita/p/12312438.html
Copyright © 2020-2023  润新知