CSP-1
29-1田地丈量
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e4+10;
int n,a,b;
bool st[N][N];
int main()
{
cin>>n>>a>>b;
while(n--)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
x1=max(0,x1),x2=max(0,x2),y1=max(y1,0),y2=max(0,y2);
for(int i=x1;i<x2;i++)
for(int j=y1;j<y2;j++)
st[i][j]=1;
}
int res=0;
for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
if(st[i][j]) res++;
cout<<res;
}
28-1*现值输入
*理解100%
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
double m,res;
int main()
{
scanf("%d%lf",&n,&m);
double x;
for(int i=0;i<=n;i++)
{
cin>>x;
res+=x*pow(1+m,-i);
}
printf("%.3f",res);
}
27-1 如此编码
100%
//根据提示
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=40;
int c[N],b[N],a[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
c[0]=1;
int sum=0;
for(int i=1;i<n;i++)
{
c[i]=c[i-1]*a[i];
b[i]=m%c[i]/c[i-1];
sum+=c[i-1]*b[i];
}
for(int i=1;i<n;i++) cout<<b[i]<<" ";
b[n]=(m-sum)/c[n-1];
cout<<b[n]<<endl;
}
26-1归一化处理
100%
//根据题目中的提示
#include<iostream>
#include<cstring>
#include<algorithm>
#include<math.h> //开平方需要加的头函数
using namespace std;
const int N=100000;
double a[N];
double q[N];
int main()
{
int n;
cin>>n;
double sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
double s_um=sum/n;
double he=0;
for(int i=1;i<=n;i++)
he+=(a[i]-s_um)*(a[i]-s_um);
double D=he/n;
for(int i=1;i<=n;i++)
{
q[i]=(a[i]-s_um)/ sqrt(D);
}
for(int i=1;i<=n;i++)
cout<<q[i]<<endl;
}
25-1未初始化警告
50%,时间超时
#include<iostream>
#include<cstring>
#include<algorithm>
#define x first
#define y second
using namespace std;
const int N=1e5+10;
typedef pair<int ,int> PII;
PII p[N];
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<k;i++) cin>>p[i].x>>p[i].y;
int res=0;
for(int i=0;i<k;i++)
{
int flag=0;
for(int j=0;j<i;j++)
{
if(p[i].y==p[j].x||p[i].y==0) flag=1;
}
if(flag==0) res++;
}
cout<<res<<endl;
}
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int q[N];
int n,k,res;
int main()
{
cin>>n>>k;
q[0]=1; //注意当y为零时的特殊情况
for(int i=0;i<k;i++)
{
int x,y;
cin>>x>>y;
if(!q[y])
{
res++;
}
q[x]=1; //在if语句外面
}
cout<<res<<endl;
}
24-1序列查询
100%
//题意理解
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=210;
int a[N],cnt;
int main()
{
int n,k;
cin>>n>>k;
int res=0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
res+=(a[i]-a[i-1])*cnt;
//cout<<res<<endl;
cnt++;
}
res+=cnt*(k-a[n]);
cout<<res<<endl;
}
23-1数组推导
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int maxs=a[1],mins=a[1];
for(int i=2;i<=n;i++)
{
maxs+=a[i];
if(a[i]>a[i-1])
mins+=a[i];
}
cout<<maxs<<endl;
cout<<mins<<endl;
}
22-1*灰度直方图
100%
题意读懂:统计每个数出现的次数
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=300;
int h[N];
int n,m,l;
int main()
{
cin>>n>>m>>l;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int x;
cin>>x;
h[x]++;
}
}
for(int i=0;i<l;i++) cout<<h[i]<<" ";
}
21-1期末预测之安全指数
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int a[N],w[N];
int main()
{
int res=0;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i]>>w[i];
res+=a[i]*w[i];
}
if(res<0) res=0;
cout<<res<<endl;
}
20-1称监测点查询
100% 结构体存储,sort排序
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=220;
struct point{ //定义结构体
int x;
int y;
int num;
int d;
}a[N];
bool cmp(point c,point b) //排序
{
if(c.d==b.d) return c.num<b.num; //不要漏!!!!!
else return c.d<b.d;
}
int main()
{
int n,x1,y1;
cin>>n>>x1>>y1;
for(int i=0;i<n;i++)
{
cin>>a[i].x>>a[i].y;
a[i].num=i+1;
a[i].d=(a[i].x-x1)*(a[i].x-x1)+(a[i].y-y1)*(a[i].y-y1);
}
sort(a,a+n,cmp); //格式
for(int i=0;i<3;i++)
cout<<a[i].num<<endl;
}
19-1*线性分类器
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010;
struct point{
long long int x,y;
char z;
}p[N];
int n,m;
int get(int a,int b,int c,char z)
{
int s=0;
for(int i=0;i<n;i++)
{
if(p[i].z==z)
{
if(a+b*p[i].x+c*p[i].y>0) s=s|1;
else s=s|2;
}
}
return s;
}
bool check(int a,int b,int c)
{
int s1=get(a,b,c,'A'),s2=get(a,b,c,'B');
if(s1==3||s2==3) return false; //一边有A也有B
if(s1&s2) return false; //全在一边 ,全是1,或全是2
return true;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y>>p[i].z;
for(int i=0;i<m;i++)
{
int q1,q2,q3;
cin>>q1>>q2>>q3;
if(check(q1,q2,q3)) puts("Yes");
else puts("No");
}
}
100%
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e3+10;
int n,m;
struct p{
int x,y;
char c;
}a[N];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i].x>>a[i].y>>a[i].c;
}
while(m--)
{
int q1,q2,q3;
cin>>q1>>q2>>q3;
int ax=0,bx=0;
for(int i=0;i<n;i++)
{
int t=q1+q2*a[i].x+q3*a[i].y;
if(a[i].c=='A')
{
if(t>0) ax=ax|1;
else ax=ax|2;
}
else{
if(t>0) bx=bx|1;
else bx=bx|2;
}
}
if(ax==3||bx==3) puts("No");
else puts("Yes");
}
}
18-1报数
100%
//读题
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int h[5];
bool clde(int x)
{
while(x>0)
{
int n=x%10;
if(n==7) return true;
else x=x/10;
}
return false;
}
int main()
{
int n; cin>>n;
int cnt=1;
int i=1;
while(cnt<n)
{
i++;
if(i%7==0||clde(i)) h[i%4]++;
else cnt++;
}
for(int i=1;i<4;i++) cout<<h[i]<<endl;
cout<<h[0]<<endl;
}
17-1小明种苹果
100%
输出序号较小的
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int minn=0,mins=0;
int n,m;
cin>>n>>m;
int sum=0;
int a[n][m+1];
for(int i=0;i<n;i++)
for(int j=0;j<=m;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<=m;j++)
sum+=a[i][j];
for(int i=0;i<n;i++)
{
int s=0;
for(int j=1;j<=m;j++)
s=a[i][j]+s;
if(mins<abs(s))
{
mins=abs(s);
minn=i+1;
}
}
cout<<sum<<" "<<minn<<" "<<mins;
}
16-1小中大
80%(浮点数的表示)
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
int min,max=0;
double mid=0;
int i=0;
for(int i=0;i<n;i++) cin>>a[i];
if(a[0]>a[n-1])
{
max=a[0];
min=a[n-1];
}
else
{
max=a[n-1];
min=a[0];
}
if(n%2==0)
{
mid=(a[n/2]+a[n/2-1])/2.0; //除以2.0
if((a[n/2]+a[n/2-1])%2!=0) printf("%d %.1f %d",max,mid,min);
else printf("%d %.0f %d",max,mid,min);
}
else
{
mid=a[n/2];
printf("%d %.0f %d",max,mid,min);
}
}
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++) cin>>a[i];
int max=0,min=0;
int c=0;
if(a[0]>a[n-1])
{
max=a[0];
min=a[n-1];
}
else
{
max=a[n-1];
min=a[0];
}
if(n%2!=0)
{
c=a[n/2];
cout<<max<<" "<<c<<" "<<min;
return 0;
}
else
{
int b=a[n/2]+a[n/2-1];
if(b%2==0)
{
cout<<max<<" "<<b/2<<" "<<min;
return 0;
}
else
{
double z=(a[n/2]+a[n/2-1])/2.0;
printf("%d %.1f %d",max,z,min);
return 0;
}
}
}
15-1小明上学
100%
#include<iostream>
#include<cstring>
#include<algorithm>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII; //直接k,t,边输入边计算
PII a[110];
int main()
{
int r,y,g;
cin>>r>>y>>g;
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i].x>>a[i].y;
int sum=0;
for(int i=0;i<n;i++)
{
if(a[i].x==0) sum+=a[i].y;
else if(a[i].x==3) continue;
else if(a[i].x==2) sum+=a[i].y+r;
else sum=sum+a[i].y;
}
cout<<sum<<endl;
}
14-1卖菜
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010;
int a[N],b[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
b[0]=(a[0]+a[1])/2;
b[n-1]=(a[n-1]+a[n-2])/2;
for(int i=1;i<n-1;i++) b[i]=(a[i-1]+a[i]+a[i+1])/3;
for(int i=0;i<n;i++) cout<<b[i]<<" ";
}
13-1跳一跳
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int x;
cin>>x;
int sum=0;
if(x==2) sum=2;
if(x==1) sum=1;
int s=x; //上一局的得分
while(cin>>x&&x!=0)
{
if(x==1)
{
sum+=1;
s=1;
}
else if(x==2&&s==1)
{
sum+=2;
s=2;
}
else
{
sum=sum+2+s;
s=s+2;
}
}
cout<<sum<<endl;
}
12-1最小差值
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n;
cin>>n;
int min=1e8;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
if(min>abs(a[i]-a[j])) min=abs(a[i]-a[j]);
}
cout<<min<<endl;
}
11-1打酱油
100%
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int m=n/50;
n=n%50;
int p=n/30;
n=n%30;
int sum=0;
sum=2*m+n/10+p+m*5+p*3;
cout<<sum<<endl;
}
10-1分蛋糕
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++) cin>>a[i];
int res=0;
int sum=0;
for(int i=0;i<n;i++)
{
sum=sum+a[i];
if(sum>=k)
{
sum=0;
res++;
}
}
if(sum<k&&sum>0) res++; //sum>0
cout<<res<<endl;
}
9-1中间数
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
int low=0,big=0;
for(int j=0;j<n;j++)
{
if(a[i]<a[j]) big++;
if(a[i]>a[j]) low++;
}
if(low==big)
{
cout<<a[i];
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}
8-1最大波动
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n;
cin>>n;
int max=0;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=1;i<n;i++)
if(max<abs(a[i]-a[i-1])) max=abs(a[i]-a[i-1]);
cout<<max;
}
7-1折点计数
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n;
cin>>n;
int res=0;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=1;i<n-1;i++)
{
int l=0,r=0; //上升记为1,下降记为0,折点为一个上升一个下降
if(a[i]>a[i-1]) l=1;
if(a[i]<a[i+1]) r=1;
if(l+r==1) res++;
}
cout<<res;
}
6-1数位之和
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n;
cin>>n;
int res=0;
while(n)
{
res+=n%10;
n=n/10;
}
cout<<res;
}
5-1数列分段
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int res=1;
for(int i=1;i<n;i++)
{
if(a[i]!=a[i-1]) res++;
}
cout<<res;
}
4-1图像旋转
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int a[N][N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int j=m-1;j>=0;j--)
{
for(int i=0;i<n;i++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
3-1门禁系统
100%
哈希表
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1010;
int h[N];
int main()
{
int n; cin>>n;
for(int i=0;i<n;i++)
{
int x; cin>>x;
h[x]++;
cout<<h[x]<<" ";
}
}
2-1相邻数对
100%
哈希表
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=10010;
int h[N];
int main()
{
int n;
cin>>n;
int res=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
h[x]=1;
}
for(int i=1;i<N;i++)
if(h[i]==1&&h[i-1]==1) res++;
cout<<res;
}
1-1相反数
100%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=510;
int a[N];
int main()
{
int n;
cin>>n;
int res=0;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
if(a[i]<0)
{
for(int j=0;j<n;j++)
if(a[j]==abs(a[i]))
res++;
}
}
cout<<res;
}
0-1出现次数最多的数
90%
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=10010; //注意数据范围
int h[N];
int main()
{
int n;
cin>>n;
int max=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
h[x]++;
}
int res=0;
for(int i=0;i<N;i++)
{
if(h[i]>max)
{
max=h[i];
res=i;
}
}
cout<<res;
}
技巧
查看csp(1)