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

Codeforces Round #272 (Div. 2) ABCDE

时间:2016-09-09 20:24:49      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

A. Dreamoon and Stairs

题解:

首先写出尽可能2多的步数,然后判断能否%m,不能就加上最小的数使其能%m就行了

代码:

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define se second
#define fs first
#define LL long long
#define CLR(x) memset(x,0,sizeof x)
#define MC(x,y) memcpy(x,y,sizeof(x))  
#define SZ(x) ((int)(x).size())
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 
typedef pair<int,int> P;
const double eps=1e-9;
const int N=1e5+10;
const int M=1e3+10;
const int mod=1e9+7;
const int INF=1e9+10;


int n,m;

int main(){
    int n,m;
    cin>>n>>m;
    if(n<m) cout<<-1<<endl;
    else{
    int ans=n/2+(n%2==0?0:1);
    if(ans%m==0) cout<<ans<<endl;
    else{
        for(int i=1;i<m;i++){
            if((ans+i)%m==0){
                cout<<ans+i<<endl;
                break;
            }
        }
    }
    }
}

 

B.Dreamoon and WiFi

题解:

简单dp,递推搜索一下就行了

代码:

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define se second
#define fs first
#define LL long long
#define CLR(x) memset(x,0,sizeof x)
#define MC(x,y) memcpy(x,y,sizeof(x))  
#define SZ(x) ((int)(x).size())
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 
typedef pair<int,int> P;
const double eps=1e-9;
const int N=1e5+10;
const int M=1e3+10;
const int mod=1e9+7;
const int INF=1e9+10;

string s1,s2;
int cnt1,cnt,len;

void DP(int pos,int c){
      if(pos==len){
         if(c==cnt1) cnt++;
         return;
     }
     if(s2[pos]==+)  DP(pos+1,c+1);
     if(s2[pos]==-)  DP(pos+1,c-1);
     if(s2[pos]==?){
         DP(pos+1,c-1);
         DP(pos+1,c+1);
     }
}

int main(){
    cin>>s1>>s2;
    cnt1=0,cnt=0;
    len=s1.length();
    for(int i=0;i<len;i++) if(s1[i]==+) cnt1++;else cnt1--;
    int sum=1;
    for(int i=0;i<len;i++) if(s2[i]==?) sum*=2;
    DP(0,0);
    cout<<setprecision(15)<<(double)cnt/(double)sum<<endl;
    return 0;
}

 

C.Dreamoon and Sums

题解:

注意到x/b=x/b*b+x%b就行。然后注意每个计算位置都要计算取mod.....

代码:

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define se second
#define fs first
#define LL long long
#define CLR(x) memset(x,0,sizeof x)
#define MC(x,y) memcpy(x,y,sizeof(x))  
#define SZ(x) ((int)(x).size())
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 
typedef pair<int,int> P;
const double eps=1e-9;
const int N=1e5+10;
const int M=1e3+10;
const LL mod=1000000007;
const int INF=1e9+10;

LL a,b;

int main(){
    cin>>a>>b;
    LL k=((1LL+a)*a/2%mod*b%mod+a)%mod;
    LL sum=0;
    for(LL i=1;i<b;i++){
        sum+=i*k;
        sum%=mod;
    }
    cout<<sum<<endl;
}

 

D. Dreamoon and Sets

题解:

规律题,不多说

代码:

#include <iostream>
using namespace std;

int main(){
    int n,k;
    cin>>k>>n;
    cout<<(6*k-1)*n<<endl;
    for(int i=0;i<k;i++)cout<<n*(6*i+1)<<" "<<n*(6*i+2)<<" "<<n*(6*i+3)<<" "<<n*(6*i+5)<<endl;

}

 

E. Dreamoon and Strings

题解:

暴力处理每个位置,从后面到前面的第一个模板的位置,然后dp处理

参考博客http://www.cnblogs.com/qscqesze/p/5794709.html

代码:

//Coding by qscqesze
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2005;
char s1[maxn],s2[maxn];
int dp[maxn][maxn];
int len1,len2;
int solve(int x)
{
    if(x<len2)return maxn;
    int a=x,b=len2,tmp=0;
    while(a&&b)
    {
        if(s1[a]==s2[b])a--,b--;
        else tmp++,a--;
    }
    if(b==0)return tmp;
    else return maxn;
}
int main()
{
    scanf("%s%s",s1+1,s2+1);
    len1 = strlen(s1+1);
    len2 = strlen(s2+1);
    for(int i=0;i<=len1;i++)
        for(int j=0;j<=len1;j++)
            if(j>i)dp[i][j]=-3000;
    for(int i=1;i<=len1;i++)
    {
        int x=solve(i);
        for(int k=0;k<=len1;k++)
            dp[i][k]=max(dp[i][k],dp[i-1][k]);
        for(int k=0;k<=len1;k++)if(x<=k)
            dp[i][k]=max(dp[i][k],dp[i-x-len2][k-x]+1);
    }
    for(int i=0;i<=len1;i++)
        printf("%d ",dp[len1][i]);
    printf("\n");
}

 

Codeforces Round #272 (Div. 2) ABCDE

标签:

原文地址:http://www.cnblogs.com/byene/p/5857820.html

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