掉大分哭 😭😭😭
第一题正常过,第二题读题不仔细,没及时重写代码消耗太多时间。。。
这周题都蛮暴力的感觉,个人认为比较考察读题和基本的代码能力,枚举,调stl什么的。。。
T1
存下最后一个数 排序后异或 输出
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
typedef long long ll;
int a[100010],n;
int main (){
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ){
scanf("%d", &a[i]);
}
int x=a[n];
sort(a+1,a+n+1);
x^=a[n];
cout<<x;
return 0;
}
T2
枚举每一个位置,check函数判断 再记数
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
int ax,ay,bx,by;
bool st[110][110];
bool check(int x,int y){
if (x==ax||y==ay) return 0;
if (x==bx&&y==by) return 0;
for (int i = 0; i < 8; i ++ ){
int a=bx+dx[i],b=by+dy[i];
if (a>=0&&a<8&&b>=0&&b<8){
if (a==x&&b==y) return 0;
}
}
for (int i = 0; i < 8; i ++ ){
int a=x+dx[i],b=y+dy[i];
if (a>=0&&a<8&&b>=0&&b<8){
if (st[a][b]) return 0;
}
}
return 1;
}
int main(){
string a,b;
cin>>a>>b;
ax=(a[1]-'0'-8)*-1;
ay=a[0]-'a';
bx=(b[1]-'0'-8)*-1;
by=b[0]-'a';
st[ax][ay]=st[bx][by]=1;
int ans=0;
for (int i = 0; i < 8; i ++ ){
for (int j = 0; j < 8; j ++ ){
ans+=check(i,j);
}
}
cout<<ans;
return 0;
}
T3
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
//考察优先队列(堆)的使用
//一个难点在于如何实现删除一本书 且把它删干净
//因为一本书有两个知识点 两个知识点 可能一样也可能不一样
//解决方法的话就是开个布尔数组存储是否取出
//每轮查看有无书时都删一下该组st记录取出却还没队列弹出的书
const int N = 2e5+10;
struct my_pair {//通过重载小于号 实现pair
int x,y;
bool operator < (const my_pair& a) const{//降序 小根堆
if (x!=a.x) return x>a.x;
return y>a.y;
}
};
priority_queue<my_pair> h[3];
bool st[N];
int n,m;
int p[N];
int main(){
scanf("%d", &n);
for (int i=1;i<=n;i++) scanf ("%d",&p[i]);
for (int i=0;i<2;i++){
for (int j=1;j<=n;j++){
int x;
scanf ("%d",&x);
x--;
h[x].push({p[j],j});
}
}
scanf ("%d",&m);
while (m--){
int x;
scanf ("%d",&x);
x--;
while (h[x].size()&&st[h[x].top().y]) h[x].pop();
//本题核心 st表判重 如果一本书没删干净,删掉
//每轮查看有无书时都删一下该组st记录取出却还没队列弹出的书
if (!h[x].size()) {
printf ("-1 ");
}
else {
auto t=h[x].top();
h[x].pop();
printf ("%d ",t.x);
st[t.y]=1;
}
}
return 0;
}