码迷,mamicode.com
首页 > 其他好文 > 详细

DAY1

时间:2020-02-05 23:20:01      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:substr   统计   href   string   event   for   -418   排序   char   

传送门

A数学题统计

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mod 1000000007
 
long long m,n;
 
long long sum;
 
int main()
{
  scanf("%lld%lld",&m,&n);
  long long int a,b;
  a=2*(m+n-2);
  b=(2*m*n-3*m-3*n+4);
  sum=((a%mod)*(b%mod))%mod;
  printf("%lld\n",sum );
  return 0;
}
View Code

B数学期望

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
 
int n,x,a,b;
 
int main()
{
    scanf("%d%d%d%d",&n,&x,&a,&b);
    int aa,bb;
    aa=n*a;
    bb=n*b;
    double ans;
    ans=aa*x+bb*(100-x);
    ans=ans/100.;
    printf("%.2lf",ans);   
    return 0;
}
View Code

D水题排序

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100009
using namespace std;
 
int n;
 
int a[N];
 
int main()
{
    scanf("%d",&n);
    for(int i=1;i<n;i++) scanf("%d",&a[i]);
    sort(a+1,a+n);a[n]=n+1;
    for(int i=1;i<=n;i++)
    {
        if(i!=a[i])
        {
            cout<<i;
            break;
        }
    }
    return 0;
}
View Code

E数学题根号n求因子个数

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int get_num(long long n){
    int tot=1;
    for(int i=2;i*i<=n;++i){
        if(n%i==0){
            int x=0;
            while(n%i==0){
                n/=i;
                x++;
            }
            tot*=(x+1);
        }
    }
    if(n>1)tot*=2;
    return tot;
}
 
int main(){
    long long n;
    cin>>n;
    int ans=0;
    while(n!=2)
    {
        n=get_num(n);//求n的因子个数
        ans++;
    }
    cout<<ans;
    return 0;
}
View Code

F图论题dfs求每个黑点对答案的贡献

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100009
#define LL long long
using namespace std;
 
int n;
LL cnt,ans;
 
int sumedge;
 
int head[N],vis[N];
 
char col[N];
 
struct Edge
{
    int x,y,nxt;
    Edge(int x=0,int y=0,int nxt=0):
    x(x),y(y),nxt(nxt){}
}edge[N<<1];
 
void add(int x,int y)
{
    edge[++sumedge]=Edge(x,y,head[x]);
    head[x]=sumedge;
}
 
void dfs(int x)
{
    for(int i=head[x];i;i=edge[i].nxt)
    {
        int v=edge[i].y;
        if(col[v]==B||vis[v]) continue;
        vis[v]=true;cnt++;
        dfs(v);
    }
}
 
void slove()
{
 
    for(int k=1;k<=n;k++)
    {
        if(col[k]==W) continue;
        int x=k;
        LL tot=0;
        memset(vis,0,sizeof(vis));
        for(int i=head[x];i;i=edge[i].nxt)
        {
            int v=edge[i].y;
            if(col[v]==W)
            {
                cnt=1;
                vis[v]=true;
                dfs(v);
                ans=ans+tot*cnt+cnt;
                tot=tot+cnt;
            }
        }
    }
    cout<<ans<<endl;
}
 
int main()
{
    scanf("%d",&n);
    scanf("%s",col+1);
    for(int i=1;i<n;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        add(x,y);
        add(y,x);
    }
    slove();
    return 0;
}
View Code

G字符串题妙啊妙

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 200009
using namespace std;
 
int n,k,ans;
 
char s[N];
 
int cnt[30];
 
int pos[30][N];
 
int main()
{
   scanf("%d%d",&n,&k);
   scanf("%s",s+1);
   ans=n+1;
   for(int i=1;i<=n;i++)
   {
       int x=s[i]-a+1;
       cnt[x]++;
       pos[x][cnt[x]]=i;
   }
   for(int i=1;i<=26;i++)
   {
       if(cnt[i]<k) continue;
       for(int j=1;j<=cnt[i]-k+1;j++)
       {
           ans=min(ans,pos[i][j+k-1]-pos[i][j]+1);
       }
   }
    if(ans==n+1) cout<<"-1\n";
    else cout<<ans<<endl;
    return 0;
}
View Code

H二分+贪心

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 200009
using namespace std;
 
int n,k;
 
int l,r,mid,ans;
 
int sum[N];
 
char s[N];
 
bool check(int x)
{
    for(int i=0;i<=n-x;i++)
    {
        if(x-(sum[i+x]-sum[i])<=k)return true;
        if(sum[i+x]-sum[i]<=k) return true;
    }
    return false;
}
 
int main()
{
    scanf("%d%d",&n,&k);
    scanf("%s",s+1);
    for(int i=1;i<=n;i++)
    {
        sum[i]=sum[i-1]+s[i]-0;
    }
    l=1;r=n;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(check(mid))
        {
            ans=mid;
            l=mid+1;
        }else r=mid-1;
    }
    cout<<ans<<endl;
    return 0;
}
View Code

I字符串区间dp妙啊妙

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 300009
#define LL long long
using namespace std;
 
int n,a,b,c;
 
string s;
 
 LL dp[N];
 
int main()
{
    scanf("%d%d%d%d",&n,&a,&b,&c);
    cin>>s;
    for(int i=0;i<n;i++)
    {
        if(i)dp[i]=max(dp[i],dp[i-1]);
        if(i+3<n&&s.substr(i,4)=="nico") dp[i+3]=max(dp[i+3],dp[i]+a);
        if(i+5<n&&s.substr(i,6)=="niconi") dp[i+5]=max(dp[i+5],dp[i]+b);
        if(i+9<n&&s.substr(i,10)=="niconiconi")dp[i+9]=max(dp[i+9],dp[i]+c);
    }
    cout<<dp[n-1];
    return 0;
}
View Code

 

DAY1

标签:substr   统计   href   string   event   for   -418   排序   char   

原文地址:https://www.cnblogs.com/zzyh/p/12267027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!