珠心算测验
说明
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练, 既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
输入格式
输入共两行,第一行包含一个整数 n,表示测试题中给出的正整数个数。
第二行有 n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
输出格式
输出共一行,包含一个整数,表示测验题答案。
样例
提示
【样例说明】
由 1+2=3, 1+3=4,故满足测试要求的答案为 2。 注意,加数和被加数必须是集合中的两个不同的数。
【数据说明】
对于 100%的数据, 3 ≤ n ≤ 100,测验题给出的正整数大小不超过 10,000
【来源】
NOIP2014普及组复赛第1题。
#include<iostream>
#include<cstdio>
using namespace std;
int t[200005],g[200005];//t是桶,t[i]表示值为i的数在集合中两两相加出现了几次,g[i]表示值为i的数是否在集合中,1为在,0为不在
int n,a[105],ans;
int main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i];//读入
g[a[i]]=1;//在集合中赋值为1
}
for (int i=1;i<n;i++){//枚举
for (int j=i+1;j<=n;j++){
t[a[i]+a[j]]++;//被加出来了
}
}
for (int i=1;i<=200002;i++){
if (t[i]>0&&g[i]) ans++;//判断是否满足,满足ans++
}
cout<<ans<<endl;
return 0;
}
螺旋矩阵
说明
一个 n 行 n 列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵。
下图是一个 n = 4 时的螺旋矩阵。
现给出矩阵大小 n 以及 i 和 j,请你求出该矩阵中第 i 行第 j 列的数是多少。
输入格式
输入共一行,包含三个整数 n, i, j,每两个整数之间用一个空格隔开,分别表示矩阵大小、 待求的数所在的行号和列号。
输出格式
输出共一行,包含一个整数,表示相应矩阵中第 i 行第 j 列的数。
样例
提示
【数据说明】
对于 50%的数据, 1 ≤ n ≤ 100;
对于 100%的数据, 1 ≤ n ≤ 30,000, 1 ≤ i ≤ n, 1 ≤ j ≤ n。
【来源】noip2014普及组第3题。
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);//优化,使cin与scanf相差无几
long long n,i,j,mi,ans=0;
cin>>n>>i>>j;
mi=min(i,min(j,min(n-i+1,n-j+1)));
if(i<=j)ans=mi*(4*(n-1)-4*mi)+10*mi-4*n-3+i+j;
else ans=mi*(4*n-4*mi)+2*mi+1-i-j;//模拟过程
cout<<ans;//输出ans
return 0;
}