题解 P3034 【[USACO11DEC]牛摄影Cow Photography】
我们可以发现,如果一头牛在三张照片中在另一头牛的前面,那么它在原生序列中就在另一头牛的前面,因为一头牛只有一次机会在一张照片中改变自己和另一头牛的相对位置,在下一张照片中就必须要回去。
所以代码就很好写了,我们用map
记录每头牛在每一张照片中的位置,然后给任意一张照片排序,比较的时候就按上文的方法就可以了:
#include<bits/stdc++.h> #include<tr1/unordered_map> using namespace std; tr1::unordered_map<int,int>ma[6];//O(1)复杂度的map bool cmp(int x,int y){ int num=0; for(int i=1;i<=5;i++){ if(ma[i][x]<ma[i][y])num++; } return num>=3; } int a[20001]; int main(){ int n; scanf("%d",&n); for(int i=1;i<=5;i++) for(int j=1;j<=n;j++){ int x; scanf("%d",&x); a[j]=x; ma[i][x]=j; } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++){ printf("%d\n",a[i]); } return 0; }
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】