做服装外贸的网站设计,网站建设工作室简介,检测网站速度,做网站绑定域名 解析域名前言
今天五道题#xff0c;难度做起来感觉很难#xff0c;其实就是纸老虎233。
正题 题目1#xff1a;公牛数学#xff08;jzoj1896#xff09;
就是高精乘
输入
第1..2行#xff1a;每行包含一个十进制数
输出
第1行#xff1a;输出两个数乘积
样例输入
1111…前言
今天五道题难度做起来感觉很难其实就是纸老虎233。
正题 题目1公牛数学jzoj1896
就是高精乘
输入
第1..2行每行包含一个十进制数
输出
第1行输出两个数乘积
样例输入
11111111111111 1111111111
样例输出
12345679011110987654321 解题思路
高精度不讲 代码
#includecstdio
#includestring
#includeiostream
using namespace std;
int a1[51],a2[51],a[251],n1,n2,g,w;
void read()
{string s1,s2;cins1s2;n1s1.size();n2s2.size();for (int i1;in1;i) {a1[i]s1[n1-i]-48;}for (int j1;jn2;j) {a2[j]s2[n2-j]-48;}
}
void cons()
{for (int i1;i50;i){for (int j1;j50;j){a[ij-1]a1[i]*a2[j]g;ga[ij-1]/10;a[ij-1]%10;}}
}
void write()
{w200;while (a[w]0) w--;for (int iw;i1;i--){printf(%d,a[i]);}
}
int main()
{//freopen(bullmath.in,r,stdin);//freopen(bullmath.out,w,stdout);read();cons();write();
} 题目2愤怒的牛jzoj1897
有n个不同距离的牛棚要放入c只牛使它们之间的最小距离最大。
输入
第1行两个用空格隔开的数字N和C。 第2~N1行每行一个整数表示每个隔间的坐标。
输出
输出只有一行即相邻两头牛最大的最近距离。
样例输入
5 3 1 2 8 4 9
样例输出
3 解题思路
用二分法查找答案用贪心来判断 代码
#includecstdio
#includeiostream
#includealgorithm
using namespace std;
int n,c,a[100001],l,r,k,sum,mins,mid;
int main()
{//freopen(aggr.in,r,stdin);//freopen(aggr.out,w,stdout);scanf(%d%d,n,c);for (int i1;in;i) scanf(%d,a[i]);sort(a1,a1n);//排序l0;ra[n];//范围while (lr){mid(lr)/2;//二分sum1;//放入1k1;//记录上一头牛for (int i2;in;i){if (a[i]-a[k]mid)//如果距离够{sum1;//放牛ki;//记录}}if (sumc) rmid-1;else lmid1;//二分}printf(%d,l-1);
} 题目3约数和jzoj1401
输入T组数据然后输入n求它的所有约数和。
输入
本题有多组数据第一行一个T表示有T组数据下面T行每行一个正整数N表示要处理的数。
输出
T行每行一个正整数表示输入中对应的数的约数和。
样例输入
1 12
样例输出
28 解题思路
用开方优化求约数的枚举过程用f数组记录重复的 代码
#includecstdio
#includealgorithm
#includecmath
using namespace std;
int x,s,t,w,f[5000001];
int main()
{scanf(%d,t);for (int ti1;tit;ti){scanf(%d,x);if (f[x]!0) printf(%d\n,f[x]);//输出else{s0;wint(sqrt(double(x)));//优化for (int i1;iw;i){if (x%i0) {si;//累加if (x/i!i)sx/i;//去重}}printf(%d\n,s);f[x]s;//记录}}
} 题目4旅行jzoj1402
一条7000km的路上已经知道有若14个旅馆分别距离原点 0, 990, 1010, 1970, 2030, 2940, 3060, 3930, 4060, 4970, 5030, 5990, 6010, 7000 还加入了n个旅馆一辆车每天至少走a km最多走b km求旅行方案总数。
输入
第一行输入A,第二行输入B第三行输入N(0N20)表示在出发之前又新增N个汽车旅馆接下来N行每行一个整数m表示旅馆离起点的距离(0
输出
输出一共有多少种旅行方案。
样例输入
1 500 0
样例输出
0 解题思路
这里用dp如果可以加入就累加方案数 #includecstdio
#includealgorithm
using namespace std;
int a,b,n,f[41],s;
int way[41]{0,0,990,1010,1970,2030,2940,3060,3930,4060,4970,5030,5990,6010,7000};
//预处理
int main()
{scanf(%d%d%d,a,b,n);n14;for (int i15;in;i) scanf(%d,way[i]);sort(way1,way1n);//快排f[1]1; for (int i2;in;i){for (int j1;ji;j){if (way[i]-way[j]a way[i]-way[j]b){f[i]f[j];//dp}}}for (int i1;in;i) if (way[i]b7000) sf[i];//累加可以到达宾馆的方案printf(%d,f[n]);//输出
} 题目5逆序统计1403
给出n个数字求出逆序对为k的排列数。
输入
从文件COUNT.IN输入。输入第一行有两个整数N 和K。其中N100,KN*(N-1)/2
输出
将1..N 的逆序对数量为K的特定排列的数量输出到文件COUNT.OUT。为了避免高精度计算请将结果mod 10000以后再输出
样例输入
5 3
样例输出
15 解题思路
从两个方向[i][j-1][i-1][j]然后减去重复 代码
#includecstdio
using namespace std;
int n,k,f[101][4951];
int main()
{scanf(%d%d,n,k);f[0][0]1;//初始化for (int i1;in;i)for (int j0;jk;j)if(j)//避免越界{if (ij) f[i][j](f[i-1][j]f[i][j-1])%10000;//动态转移else f[i][j](f[i-1][j]f[i][j-1]-f[i-1][j-i])%10000;//动态转移}else f[i][j]f[i-1][j];f[n][k](f[n][k]10000)%10000;//避免负数printf(%d,f[n][k]);
}