浙江省赛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\n",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\n",ans);
    }
    return 0;
}
View Code

 

 

 

 

 

 

 

 

 

 

待更新;

posted @ 2020-02-15 16:11  无声-黑白  阅读(133)  评论(0编辑  收藏  举报