POJ 3737 UmBasketella
#include <cmath>
#include <cstdio>
using namespace std;
const double eps = 1e-8;
#define PI acos(-1.0)
double S;
double GetH(double r){
double a = S/PI/r - r;
a = a*a - r*r;
return sqrt(a);
}
double GetV(double r, double h){
return PI*r*r*h/3;
}
int main(){
while(scanf("%lf", &S) != EOF){
double l, r, lm, rm, lV, rV;
l = 0.00001;
r = sqrt(S/PI/2);
while(r-l > eps){
lm = (r-l)/3 + l;
rm = (r-l)/3*2 + l;
lV = GetV(lm, GetH(lm));
rV = GetV(rm, GetH(rm));
if(lV < rV) l = lm;
else r = rm;
}
double h = GetH(r);
double V = GetV(r, h);
printf("%.2lf\n%.2lf\n%.2lf\n", V, h, r);
}
return 0;
}
//
POJ 3070 Fibonacci
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int M = 4;
const int N = 10000;
struct Mat{
int a[M][M], n;
Mat(int _n = 0){
n = _n;
memset(a, 0, sizeof(a));
}
void GetE(){
memset(a, 0, sizeof(a));
for(int i = 0; i < M; i++) a[i][i] = 1;
}
friend Mat operator* (const Mat& a, const Mat& b){
Mat c(a.n);
int n = a.n;
for(int i = 1; i <= n; i++)
for(int k = 1; k <= n; k++)
if(a.a[i][k]){
for(int j = 1; j <= n; j++)
c.a[i][j] += a.a[i][k] * b.a[k][j], c.a[i][j] %= N;
}
return c;
}
};
Mat qPow(Mat f, int m){
Mat ans(f.n);
ans.GetE();
while(m){
if(m&1) ans = ans*f;
m >>= 1;
f = f*f;
}
return ans;
}
int main(){
int n;
Mat f(2);
f.a[1][1] = f.a[1][2] = f.a[2][1] = 1;
while(scanf("%d", &n), n > -1){
if(n == 0) puts("0");
else printf("%d\n", qPow(f, n-1).a[1][1]);
}
return 0;
}
///
HDU 2087 剪花布条
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long LL;
const int M = 1200;
const LL base = 1007;
LL p[M], f[M];
char s[M], a[M];
LL Get(int l, int r){
return f[r]-f[l]*p[r-l];
}
int main(){
p[0] = 1;
for(int i = 1; i < M; i++) p[i] = p[i-1]*base;
while(1){
scanf("%s", s+1);
if(s[1] == '#')break;
scanf("%s", a+1);
int n, m;
m = strlen(a+1), n = strlen(s+1);
int buf = 0;
for(int i = 1; i <= m; i++) buf = buf*base + a[i];
for(int i = 1; i <= n; i++) f[i] = f[i-1]*base + s[i];
if(m > n) {
puts("0");continue;
}
int ans = 0, len = 0;
for(int i = 1; i <= n-m+1; i++)
if(buf == Get(i-1, i+m-1)) i += m-1, ans++;
cout << ans << endl;
}
return 0;
}
三道水题
最新推荐文章于 2020-02-26 11:21:19 发布