CodeM美团点评编程大赛初赛A轮

题目:https://www.nowcoder.com/test/5523985/summary

题解:https://www.nowcoder.com/discuss/28582

倒水:

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5+5;
int t[N],c[N];
int n,T,C;
//minn = (t*c+T*C)/(c+C)
//C = (t-minn)*c/(minn-T)
int main()
{
    cin >> n;
    cin >> T >> C;
    bool high = false,low = false;
    int minn = (int)1e9;//,maxn = 0;
    for(int i = 1;i <= n;i++)
    {
        scanf("%d %d",&t[i],&c[i]);
        if(t[i] > T)
            high = true;
        if(t[i] < T)
            low = true;
        minn = min(minn,t[i]);
        //maxn = max(maxn,t[i]);
    }
    if(!high && !low)//温度相同
    {
        printf("Possible\n");
        printf("%.4f\n",(double)T);
    }
    else if(high && !low)//都比T大
    {
        long long need = 0;
        for(int i = 1;i <= n;i++)
            need += (t[i]-minn)*c[i];
        //cout<<need << " need"<<endl;
        if(1ll*C*(minn-T) < need)
            printf("Impossible\n");
        else
        {
            printf("Possible\n");
            printf("%.4f\n",(double)minn);
        }
    }
    else if(!high && low)//都比T小,就把水用完
    {
        double a = 1.0*T*C,b = 1.0*C;
        for(int i = 1;i <= n;i++)
            a += t[i]*c[i],b += c[i];
        printf("Possible\n");
        printf("%.4f\n",a/b);
    }
    else
        printf("Impossible\n");
    return 0;
}

身体训练:

#include<bits/stdc++.h>
using namespace std;

const int N = 1005;
double c[N],d[N];

int main()
{
    int n;
    double v,u;
    cin >> n >> v >> u;
    for(int i = 1;i <= n;i++)
        scanf("%lf",&c[i]);
    for(int i = 1;i <= n;i++)
        scanf("%lf",&d[i]);
    double ans = 0;
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= n;j++)
            ans += u/(c[i]-(j-1)*d[i]-v);
    cout << fixed << setprecision(3) << ans << endl;
    return 0;
}

合并回文串:

#include<bits/stdc++.h>
using namespace std;

const int N = 55;
char a[N],b[N];
bool f[N][N][N][N];

int main()
{
	int T;
	cin >> T;
	while(T--)
	{
		scanf("%s",a+1);
		scanf("%s",b+1);
		int n = strlen(a+1);
		int m = strlen(b+1);
		memset(f,false,sizeof(f));
		int maxn = 0;
		for(int len1 = 0;len1 <= n;len1++)
			for(int len2 = 0;len2 <= m;len2++)
				for(int i = 1,j = len1;j <= n;i++,j++)
					for(int k = 1,l = len2;l <= m;k++,l++)
					{
						if(len1+len2 <= 1)//±Ø¶¨·ûºÏ
							f[i][j][k][l] = true;
						else
						{
							if(len1 > 1 && a[i] == a[j])
								f[i][j][k][l] |= f[i+1][j-1][k][l];
							if(len2 > 1 && b[k] == b[l])
								f[i][j][k][l] |= f[i][j][k+1][l-1];
							if(len1 && len2 && a[i] == b[l])
								f[i][j][k][l] |= f[i+1][j][k][l-1];
							if(len1 && len2 && b[k] == a[j])
								f[i][j][k][l] |= f[i][j-1][k+1][l];
						}
						if(f[i][j][k][l])
							maxn = max(maxn,len1+len2);
					}
		cout << maxn << endl;

	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值