Codeforces #105 DIV2 ABCDE

开始按照顺序刷刷以前的CF。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
int a[4],d;
int main()
{
    while (cin>>a[0]>>a[1]>>a[2]>>a[3]>>d)
    {
        int ans = 0;
        for (int i = 1; i <= d; i++)
        {
            for (int j = 0; j < 4; j++)
                if (i % a[j] == 0)
            {
                ans ++;
                break;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
View Code

B贡献无数发WA。注意相遇的条件 直接double处理就可以。一直以为按照相应直接直接跳跃相应距离 直接int处理

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
int vp,vd,t,f,c;
int pos[1010];
int main()
{
    while (cin>>vp>>vd>>t>>f>>c)
    {
       if (vp >= vd) {puts("0");continue;}
       int thev = vd - vp;
       double pospri = vp * t;int ans = 0;
       while (pospri < c)
       {
           double ti = pospri / (double)thev;
           if ((double) vd * ti >= c) break;
           ans ++;
           pospri = pospri + f * vp +(double) 2 * ti * vp;
          // printf("%d
",pospri);
           if (pospri >= c) break;
       }
       cout <<ans <<endl;
    }
    return 0;
}
View Code

C 坑点比较多。注意b等于0的情况

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
int n,a,b;
int num[110];
int main()
{
    while (cin >> n >> a >> b)
    {
        if (a > n || b > n){ puts("-1");continue;}
        if (a > 0 &&  b == 0)
        {
            if (n - a < 2) {puts("-1");continue;}
            else
            {
                printf("1 1 ");
                for (int i = 1 ,k = 2,j = 3; j <= n && i <= a ; k++,i++) printf("%d ",k);
                for (int i = a + 3; i <= n; i++) printf("%d ",a + 1);
                puts("");
            }
            continue;
        }
        for (int i = 0; i < 110; i++) num[i] = 1;
        int cas = 1;
        int sum = 1;
        for (int i = 2; i <= b + 1; i++)
        {
            num[i] = sum + cas;
            sum += num[i];
        }
        cas = 1;
        for (int i = b + 2; i <= a + b + 1;i ++)
        {
            num[i] = num[i - 1] + cas;
        }
        for (int i = 1; i <= n; i++)
            if (i == 1) cout << num[i];
            else cout << ' ' << num[i];
        puts("");
    }
    return 0;
}
View Code

D DP

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
int w,b;
double dp[1010][1010];
void init()
{
    for (int i = 0; i < 1001; i++)
    {
        dp[i][0] = 1.0;
        dp[0][i] = 0.0;
    }
    for (int w = 1; w < 1001; w++)
        for (int b = 1; b < 1001; b++)
    {
        dp[w][b]  += 1.0 * w / (w + b);
        if (b >= 3)
            dp[w][b] += dp[w][b - 3] * 1.0 * b / (w + b) * 1.0 * (b - 1) / (w + b - 1) * 1.0 * (b - 2) / (w + b - 2);
        if (b >= 2)
            dp[w][b] += dp[w - 1][b - 2] * 1.0 * b / (w + b) * 1.0 * (b - 1) / (w + b - 1) * w / (w + b - 2);
    }
}
int main()
{
    init();
    while (scanf("%d%d",&w,&b) != EOF)
    printf("%.9lf
",dp[w][b]);
    return 0;
}
View Code

E DP预处理+DP

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
#define MAXN 110
#define MAXD 10010
int sum[MAXN][MAXD],dp[MAXN][MAXD],res[MAXN][MAXD];
int N,M;
int num[MAXN];
int main()
{
    while (scanf("%d%d",&N,&M) != EOF)
    {
        memset(dp,0,sizeof(dp));
        memset(res,0,sizeof(res));
        for (int i = 1; i <= N; i++)
        {
            scanf("%d",&num[i]);
            sum[i][0] = 0;
            for (int j = 1; j <= num[i];j++)
            {
                int tmp;
                scanf("%d",&tmp);
                sum[i][j] = sum[i][j - 1] + tmp;
            }
            res[i][0] = 0;
            for (int j = 1; j <= num[i]; j++)
              for (int k = 0; k <= j; k++)
                res[i][j] = max(res[i][j],sum[i][k] + sum[i][num[i]] - sum[i][num[i] - (j - k)]);
        }
        for (int i = 1; i <= N; i++)
            for (int j = 1; j <= M; j++)
              for (int k = 0; k <= num[i] && k <= j; k++)
              dp[i][j] = max(dp[i][j],max(dp[i - 1][j],dp[i - 1][j - k] + res[i][k]));
        printf("%d
",dp[N][M]);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Commence/p/4033713.html