首先说说体会把
这次前几个都是模拟,最后一道题以为自己可能会结果是半吊子根本不会,导致浪费了三个小时写第五题只有十分 如果不畏惧字符串而专心的写第三题的话,应该结果会不一样把。希望下次能好好考
第一题就是个简单的报数
#include <bits/stdc++.h>
using namespace std;
int ans[4] = {0};
int judge(int x)
{
int last = 0;
if(x%7==0)
return 1;
else
{
while(x>0)
{
last = x%10;
x/=10;
if(last==7)
return 1;
}
}
return 0;
}
int main()
{
// ios::sync_with_stdio(false);
int n;
int num = 0;
cin>>n;
for(int i=1; num<n; i++)
{
if(judge(i))
{
ans[(i-1)%4]++;
}
else
{
num++;
}
}
for(int i=0; i<4; i++)
cout<<ans[i]<<endl;
return 0;
}
第二题。考试的时候太毛躁了,其实直接暴力搜索就好了,心态真的太差了 浪费自己的时间,主要还是自己太菜了
#include <bits/stdc++.h>
using namespace std;
struct Point{
int x,y;
Point(const Point& b)
{
x = b.x;
y = b.y;
}
Point()
{
}
Point(int a, int b)
{
x=a;
y=b;
}
const bool operator <(Point b) const
{
return x==b.x?y>b.y:x>b.x;
}
};
//int valid[3000][3000]={0};
int ans[5] = {0};
priority_queue<Point> q;
vector<Point> g[3000];
void judge(Point a, int i, int j) //判断是否合法
{
int flag[4] = {0};//看是不是一个合法的点,得找他的,上下左右
int score=0;
for(int m = 0; m<g[i-1].size(); m++)
{
if(g[i-1][m].x==(a.x-1)&&g[i-1][m].y==a.y)
flag[0] = 1;
if(g[i-1][m].x==(a.x-1)&&g[i-1][m].y==(a.y+1))
score++;
if(g[i-1][m].x==(a.x-1)&&g[i-1][m].y==(a.y-1))
score++;
}
for(int m = 0; m<g[i].size(); m++)
{
if(g[i][m].y==(a.y+1))
flag[1] = 1;
if(g[i][m].y==(a.y-1))
flag[2] = 1;
}
for(int m = 0; m<g[i+1].size(); m++)
{
if(g[i+1][m].x==(a.x+1)&&g[i+1][m].y==a.y)
flag[3] = 1;
if(g[i+1][m].x==(a.x+1)&&g[i+1][m].y==(a.y+1))
score++;
if(g[i+1][m].x==(a.x+1)&&g[i+1][m].y==(a.y-1))
score++;
}
for(int m=0; m<4; m++)
if(!flag[m])
{
// valid[i][j] =0
//cout<<flag[m]<<" ";
return ;
}
ans[score]++;
//cout<<score<<endl;
}
int main()
{
int n;
cin>>n;
int x;
int y;
for(int i=0; i<n; i++)
{
cin>>x>>y;
q.push(Point(x,y));
}
int raw = 0;
Point to = q.top();
g[raw].push_back(to);
//cout<<to.x<<" "<<to.y<<endl;
int curx = to.x;
q.pop();
while(!q.empty())
{
to = q.top();
//cout<<to.x<<" "<<to.y<<endl;
q.pop();
if(curx!=to.x) //代表在另外的行了
{
raw++;
curx = to.x;
g[raw].push_back(to);
}
else{
g[raw].push_back(to);
}
}
//现在已经存起来了
//开始判断结果,先排序
if(raw<2)
{
//cout<<"11"<<endl;
cout<<"0"<<endl;
cout<<"0"<<endl;
cout<<"0"<<endl;
cout<<"0"<<endl;
cout<<"0"<<endl;
}
else
{
//cout<<raw<<endl;
//for(int i=0; i<=raw; i++)
// sort(g[i].begin(),g[i].end());
for(int i=1; i<=raw-1; i++)
{
//cout<<g[i].size()<<endl;
for(int j=1; j<g[i].size()-1; j++)
{
//cout<<"diaoyonfg"<<endl;
judge(g[i][j],i,j);
}
}
for(int i=0; i<5; i++)
cout<<ans[i]<<endl;
}
return 0;
}
/*
7
1 2
2 1
0 0
1 1
2 0
0 1
1 0
11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
*/
第三题是个字符串,当时想用dfs来做,但是我是真的不喜欢做字符串的题,于是直接写了前两个样例点的就看后面的了
第四题没仔细看,直接看第五题,觉得自己会,想骗分,结果模两次不满足分配律,直接凉凉
最后总分230,下次再来,凉凉。 下次一定好好做第三题