ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UCF Local Programming Contest 2015

2020-03-01 11:03:06  阅读:233  来源: 互联网

标签:return int scanf ans Programming UCF printf 2015 frac


# D
贪心。当天所需要的原材料如果不够的话从当天及之前中挑选价格最低的一天购买。

### 代码
```cpp
#include <bits/stdc++.h>
using namespace std;
int T, c[1005], pl[1005], ps[1005];
bool buy[1005];
int main() {
scanf("%d", &T);
while(T--) {
priority_queue<int, vector<int>, greater<int> > ss;
int now = 0, ans = 0;
int d, x, s; scanf("%d%d%d", &d, &x, &s);
for(int i=1; i<=d; ++i) {
scanf("%d%d%d", &c[i], &pl[i], &ps[i]);
int minn, mn; minn = pl[i];
for(int j=1; j<=i-1; ++j) if(pl[j] < minn) minn = pl[j];
ans += minn * c[i] * x;
minn = ps[i];
for(int j=1; j<=i-1; ++j) if(ps[j] < minn) minn = ps[j];
while(now < c[i] * s) now += 80, ans += minn;
now -= c[i] * s;
}
printf("%d\n", ans);
}
return 0;
}

```
# E
如果圆的半径比正方形内切圆半径小,则面积为圆的面积。

如果圆的半径比正方形外接圆半径大,则面积为正方形面积。

其他情况

![](http://i1.fuimg.com/642016/d05085b74581a2aa.png)

用圆的面积减去未重合部分面积即为答案

$\theta=acos(\frac{L}{2R})$

$S_1=R*L*sin\theta*\frac{1}{4}$

$S_2=\frac{\theta}{2\pi}*\pi * R^2$

$Ans = \pi*R^2-8*(S_1-S_2)$

### 代码
```cpp
#include <bits/stdc++.h>
using namespace std;
const double pi = 3.14159265358979;
int main() {
int n;
scanf("%d", &n);
for(int i=1; i<=n; ++i) {
int s, r;
scanf("%d%d", &s, &r);
double ans = 0;
if(r * 2 <= s) ans = pi * r * r;
else if(2 * s * s <= 4 * r * r) ans = s * s;
else {
double ss; ss = acos((1.0*s)/(2.0*r)) * r * r * 1.0 / 2.0;
ss -= 1.0 * r * (1.0*s/2) * sin(acos((1.0*s)/(2.0*r))) / 2;
ans = pi * r * r - ss * 8;
}
printf("%.2lf\n", ans);
}
return 0;
}

```
# F

平衡字符串一定满足元音辅音交错出现的形式,那么对于给出的字符串中如果存在已经确定的字母,则字符串中其余的"?"位置也都已经确定了是元音还是辅音,设应当为元音的"?"为$x$个应当为辅音的"?"为$y$个,那么答案为$6^x*20^y$。而对于全部为"?"的字符串,令字符串长度为$N$,则答案为$6^{\lfloor { \frac{N}{2}} \rfloor}*20^{N-\lfloor { \frac{N}{2}} \rfloor}+20^{\lfloor { \frac{N}{2}} \rfloor}*6^{N-\lfloor { \frac{N}{2}} \rfloor}$

注意:不要使用pow函数,自己手写快速幂。

### 代码
```cpp
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int n;
int pd(char x) {
if(x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'y') return 1;
return 0;
}
LL pow(LL a, LL x) {
LL re = 1;
while(x) {
if(x & 1) re = re * a;
a = a * a;
x >>= 1;
}
return re;
}
int main() {
scanf("%d", &n);
for(int i=1; i<=n; ++i) {
printf("String #%d: ", i);
LL ans = 1;
string s;
cin >> s;
int len = s.size();
int p=-1; for(int i=0; i<len; ++i) if(s[i] != '?') {p = i; break;}
if(p==-1) {
int w = len / 2;
// printf("%d %d\n", w, len-w);
ans = pow(6, w) * pow(20, len-w) + pow(6, len-w) * pow(20, w);
}
else {
bool fl[2];
if(((p&1) && (pd(s[p]))) || (!(p&1) && !(pd(s[p])))) fl[0] = 0, fl[1] = 1;
else fl[0] = 1, fl[1] = 0;
LL mul[2] = {20,6};
for(int i=0; i<len; ++i) {
if(s[i] == '?') ans = ans * mul[fl[i&1]];
else if(pd(s[i]) != fl[i&1]) {ans = 0; break;}
}
}
printf("%lld", ans);printf("\n\n");
}
return 0;
}

```
# G

留下一条从(1,1)到(n,n)的路,其余的格子上都可以放上棋子,因为除(1,1)(n,n)外的其他格子只允许放一颗棋子,所以可以放(n-1) * (n-1)个棋子,而第(n-1) * (n-1) + 1 颗棋子作为最后一颗棋子移动至(n,n)其余棋子依次移过去即可,如果比这个再多一个的话,那么最后一颗棋子将无法移动到终点,这样就是无解的。所以如果圆盘个数多于(n-1) * (n-1) + 1的话即为无解,少于或等于的话,答案应为(n-1) * 2 * d.

### 代码
```cpp
#include <bits/stdc++.h>
using namespace std;
int T;
int main() {
scanf("%d", &T);
for(int i=1; i<=T; ++i) {
int d, n;
scanf("%d%d", &d, &n);
printf("Grid #%d: ", i);
int ans = d * ((n - 1) + (n - 1));
if((n-1)*(n-1)+1 < d)printf("impossible\n\n");
else printf("%d\n\n", ans);
}
return 0;
}

```

 

标签:return,int,scanf,ans,Programming,UCF,printf,2015,frac
来源: https://www.cnblogs.com/Samle/p/12388654.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有