zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Acwing第 24 场周赛【完结】

24 AcWing 周赛 完结
2023-09-11 14:15:52 时间

打的很烂T2调试了好久,AK了,但是时间有点长,看来还得努力。

4070. 异或【签到】

在这里插入图片描述
https://www.acwing.com/problem/content/4073/

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int n,m,t,a[N];
int main(void)
{
    cin>>n;
    int ans=-1e9;
    for(int i=0;i<n;i++) cin>>a[i],ans=max(ans,a[i]);
    int temp=ans^a[n-1];
    cout<<temp<<endl;
	return 0;
}

4071. 国际象棋【暴力枚举】

在这里插入图片描述
https://www.acwing.com/problem/content/4074/

#include<bits/stdc++.h>
using namespace std;
int a[15][15],x,y,xx,yy;
int dx[8]={-2,-2,-1,-1,1,1,2,2};
int dy[8]={-1,1,-2,2,-2,2,-1,1};
string s1,s2;
int get(char c)
{
    if(c<='9') return c-'1';
    else return c-'a';
}
void init()
{

    for(int i=0;i<8;i++) a[x][i]=1;//攻击的位置
    for(int i=0;i<8;i++) a[i][y]=1;
    a[x][y]=-1;//标记棋子在哪里
    a[xx][yy]=-1;
    for(int i=0;i<8;i++)
    {
        int tempx=xx+dx[i];
        int tempy=yy+dy[i];
        if(tempx<0||tempx>=8) continue;
		if(tempy<0||tempy>=8) continue;
		a[tempx][tempy]=1;
    }
}
bool check(int x,int y)
{
    if(a[x][y]) return false;//该位置有棋子或者是别人的攻击范围内
    for(int i=0;i<8;i++)
    {
        int tempx=x+dx[i];
        int tempy=y+dy[i];
        if(tempx<0||tempx>=8) continue;
		if(tempy<0||tempy>=8) continue;
		if(a[tempx][tempy]==-1)   return false;//攻击到了其他棋子
    }
    return true;
}
int main(void)
{
    cin>>s1>>s2;
    y=get(s1[0]),x=get(s1[1]);
    yy=get(s2[0]),xx=get(s2[1]);
    init();
    int cnt=0;
    for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
            if(check(i,j)) cnt++;
    cout<<cnt<<endl;
	return 0;
}

4072. 习题册【模拟 小根堆】

在这里插入图片描述
https://www.acwing.com/problem/content/description/4075/

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=1e5*2+10;
struct node{int p,a,b;}temp,s[N];
priority_queue<PII,vector<PII>,greater<PII> >heap[5];
int n,m;
unordered_map<int,int>mp;
int main(void)
{
    cin>>n;
    for(int i=0;i<n;i++) scanf("%d",&s[i].p);
    for(int i=0;i<n;i++) scanf("%d",&s[i].a),heap[s[i].a].push({s[i].p,i});
    for(int i=0;i<n;i++) scanf("%d",&s[i].b),heap[s[i].b].push({s[i].p,i});
    scanf("%d",&m);
    for(int i=0;i<m;i++)
    {
        int x; scanf("%d",&x);
        while(heap[x].size())
        {
            auto t=heap[x].top();
            int u=t.second;
            if(mp[u]) heap[x].pop();
            else break;
        }
        if(heap[x].size()) 
        {
            auto t=heap[x].top();
            int w=t.first;
            int u=t.second;
            printf("%d ",w);
            mp[u]=1; heap[x].top();//标记为已经买走了
        }else printf("-1 ");
    }
	return 0;
}