摘要:
简单题View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int t; scanf("%d", &t); long long n,m; for (int i = 0; i < t; i++) { scanf("%I64d 阅读全文
摘要:
素数筛法,然后判断有几个即可。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define maxn 32005int prm[maxn];bool is[maxn];int getprm(int n){ int i, j, k = 0; int s, e = (int) (sqrt(0.0 + n) + 1); memset(is, 1, siz 阅读全文
摘要:
我们把所给数字制成条形统计图,如果确定了最终平面位置,我们把最终平面想象成地面,所有的条形图的上边缘想象成从地面向上或向下长出的山峰。我们的结果就是所有右侧山坡的垂直高度之和加上最右面一点到地面的距离。我们发现在两端点竖直高度值之间平移地面,结果不会有变化。如果移出这个范围,右侧山坡的垂直高度之和不变,而最右边一点到地面的距离会凭空增加。所以地面必然在两端点竖直高度之间。我们只需要计算右侧山峰高度值和即可,不妨把地面定在最左侧点的高度。View Code #include <iostream>#include <cstdio>#include <cstdlib&g 阅读全文
摘要:
二分加dp。dp我用的是顺推,二分查找总时间,对于每个总时间进行dp确定能否在其限制内完成任务。f[i][j]表示前i个工人完成j件a的情况下最多完成多少件b。f[i + 1][j + k] = max(f[i + 1][j + k], f[i][j] + (t - worker[i + 1].a * k) / worker[i + 1].b);View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std; 阅读全文
摘要:
Fibonacci数列的通项公式中由于(sqrt(5)-1)^n太小了,所以可以忽略,但是n必须大于16。这道题就是应用通项公式对10取对数的方法来做的,去除对数的整数部分就相当于把结果除以许多个10。View Code #include<stdio.h>#include<math.h>#define a (sqrt(5.0)+1.0)/2int main(){ int n,i,j,t,f[21]={0,1}; double ans; for(i=2;i<21;i++) f[i]=f[i-1]+f[i-2]; while(scanf("%d", 阅读全文