您的位置:首页 > 编程语言

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

2017-06-26 12:07 423 查看
题目: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
,c
;
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
,d
;

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
,b
;
bool f

;

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: