毛站,电脑禁止访问网站设置,自学网官网,秀洲区建设中心小学网站目录 1、求和
题目#xff1a;
思路#xff1a;
代码#xff1a;
2、等差数列
题目#xff1a;
思路#xff1a; 代码#xff1a;
3、顺子日期
题目#xff1a;
思路#xff1a;
代码#xff1a;
4、灌溉
题目#xff1a;
代码#xff1a; 1、求和…目录 1、求和
题目
思路
代码
2、等差数列
题目
思路 代码
3、顺子日期
题目
思路
代码
4、灌溉
题目
代码 1、求和
题目 思路 1、首先想到的是两重遍历累加和。但是当n取200000时会超时所以暴力的遍历没有办法通过全部案例。 2、将公式变形得到Sa1*a2....ana2*a3....an.....an. 3、所以先求所有项的累加和sum从第一项开始每次将sum减去一项自身ai乘以自身ai,再将这些和相加得到结果。 代码
#includeiostream
using namespace std;
int main()
{int n,a[200010];cin n;long long sum 0;for (int i 0; i n; i){cin a[i];sum a[i];}long long ans 0;for (int i 0; i n; i){sum - a[i];ans a[i] * sum;}cout ans;
}
2、等差数列
题目 思路 1、求等差数列一开始想到直接找它们的最小差作为公差但实际上是不行的这可能没有办法构成等差数列。比如15、5、1这三个数如果取5-1的差4为公差会发现1、5、9、13、1715不在等差数列中所以不可取。 2、通过上面的例子我们可以发现我们要求的公差是可以满足一个数可以等于从另一个数加公差的倍数。所以我们要求的公差是将所有数从小到大排序所有相邻两数差的最大公约数。比如1、5、15差有4、10它们的最大公约数为2所以公差为2构成1、3、5、7、9、11、13、15的等差数列。 3、最后得到公差个数即位最大的数减去最小的数/公差1有一种情况比较特殊当公差为0即每个数都相等的时候个数即为n。 代码
#includeiostream
#includealgorithm
using namespace std;
long long gcd(int a, int b)//辗转相除求最大公约数
{if (b 0)return a;elsereturn gcd(b, a % b);
}
int main()
{int n;cin n;long long a[100010];for (int i 0; i n; i)cin a[i];sort(a, a n);long long d a[1] - a[0];for (int i 2; i n; i){d gcd(d, a[i] - a[i - 1]);}if (a[n - 1] a[0])cout n;elsecout ((a[n - 1] - a[0]) / d ) 1;
}
3、顺子日期
题目 思路
1、判断每一天是否存在顺子序列:012、123、234.......,只要存在一个顺子序列即为顺子日期。
代码
#includeiostream
#includealgorithm
using namespace std;
int judge(int t[])
{int flag 0;for (int i 3; i 5; i){if (t[i] (t[i 1] - 1) (t[i 1] t[i 2] - 1)){flag 1;break;}}return flag;
}
int main()
{int day[13] { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int t[8] { 2,0,2,2 },ans 0;for (int i 1; i 12; i){t[4] i / 10;t[5] i % 10;for (int j 1; j day[i]; j){t[6] j / 10;t[7] j % 10;if (judge(t)){ans;//for (int i 0; i 8; i)//cout t[i];//cout endl;}}}cout ans;
}
4、灌溉
题目 代码
#includeiostream
#includecmath
using namespace std;
int n, m, t, r[110], c[110];
int main()
{cin n m t;for (int i 1; i t; i)cin r[i] c[i];int k;cin k;int cnt 0;for (int i 1; i n; i){for (int j 1; j m; j){for (int l 1; l t; l){int d abs(r[l] - i) abs(c[l] - j);if (d k){cnt;break;}}}}cout cnt endl;
}