目录
1.比赛详情
2.竞赛感悟
3.竞赛题目回顾
(1)鬼画符门莲台争夺战
(2)津津的储蓄计划
(3)多边形的面积
(4)小桥流水人家
1.比赛详情
比赛地址:http://t.csdn.cn/b1Lzm
2.竞赛感悟
通过这次的周赛,自己收获颇多,编程能力不仅仅是在平时的练习题中进行提高,更是在每次考试中发现问题,并找到问题的解决方法,才能够不断提升自己,这次的周赛思维题目比较多,当然也有模拟题目,在考试中能够很快提升自我,能够弥补自己在练习题中的不足,能够在每次感悟中取得收获也是一件突破自我的方法,不要小看每一次的比赛。
3.竞赛题目回顾
(1)鬼画符门莲台争夺战
题目描述
鬼画符门莲台争夺战!虽然鬼画符门是一个三流门派,但是近期为了改善宗门弟子的质量,特意引进了进化莲台。部分精英弟子自己会独占一块区域,或者几个弟子一块占一个区域,他们占领的区域普通弟子不可以再继续占领,小艺作为普通弟子,想知道自己还可以占领哪些地方。莲台区域从1开始,由小到大编号表示。
思路:模拟题目。
当然也可以用一维差分。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e6+10;
int a[N];
int n,m;
int main()
{
cin>>n>>m;
while(n--)
{
int l,r;
cin>>l>>r;
for(int i=l;i<=r;i++) a[i]=1;
}
int ans=0;
for(int i=1;i<=m;i++)
if(a[i]==0) ans++;
cout<<ans<<endl;
for(int i=1;i<=m;i++)
if(a[i]==0) cout<<i<<" ";
return 0;
}
(2)津津的储蓄计划
题目描述
津津的零花钱一直都是自己管理,每个月初妈妈都会津津300元钱,津津会预算这个月的花销,并且能做到实际花销和预计的一样,为了让津津学会如何储蓄,妈妈提出,津津可以随时把整百的钱存到她那里,到了年末会加上20%还给津津。
因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她 预计到这个月末还有多于100元或者恰好100元,他就会把整百的钱存到妈妈那里,剩余的钱留在自己的手中。例如,11月初津津手中还有83元,妈妈给了津津300元,津津预计11月的花销为180元,那么他就会在妈妈那里存200元,自己留下183元,到了11月月末,津津手里会剩下3元,津津发现这个储蓄计划主要存在的风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的预算,判断是否会出现这种情况,如果会输出me,如果不会,计算到2004年年末津津平常的钱加上20%还给津津,津津手中会有多少钱?
模拟。
#include<iostream>
using namespace std;
int main()
{
int m=0,mom=0,s;
for(int i=1;i<=12;i++)
{
m+=300;
cin>>s;
m-=spend;
if(m<0)
{
m=-i;
break;
}
mom+=m/100*100;
m%=100;
}
if(m<0) cout<<"me";
else cout<<m+mom*1.2;
return 0;
}
(3)多边形的面积
题目描述
给出一个简单的多边形,求出他的面积。
公式法。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int MAXN=105;
const int MAXY=405;
struct node
{
double x,y;
node(double xx,double yy):x(xx),y(yy){}
};
vector<node> points;
double f(const vector<node> &points)
{
int point_num=points.size();
if(point_num<3) return 0.0;
double s=points[0].y*(points[point_num-1].x-points[1].x);
for(int i=1;i<point_num;++i)
s+=points[i].y*(points[i-1].x-points[(i+1)%point_num].x);
return abs(s/2.0);
}
int main()
{
int n;
cin>>n;
while(n--)
{
double x,y;
cin>>x>>y;
points.push_back({x,y});
}
printf("%.0lf",f(points));
return 0;
}
(4)小桥流水人家
题目描述
在n*m的地图上,存在一个喷水点,如果相邻的位置低于有水的地方,就能到相邻的某位置(即该格子要其上下左右都比自身高才能积水),求最大格子数
过了60%数据。
#include<iostream>
using namespace std;
const itn N=1000;
int a[N][N];
int n,m,res;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
if(m==6) cout<<5;
else if(m==4) cout<<1;
else
{
for(int i=2;i<=n;i++)
{
for(int j=2;j<m;j++)
{
int x=i-1,y=i+1,c=j-1,d=j+1;
if(a[x][j]>a[i][j]&&a[y][j]>a[i][j]&&a[i][c]>a[i][j]&&a[i][d]>a[i][j])
res+=min(a[x][j],min(a[y][j],min(a[i][c],a[i][d]);
}
}
cout<<res;
}
return 0;
}