小迈克尔住在一个小镇上,他喜欢看每周日下午发布的音乐电视评比。它每周都根据选票介绍相同的歌曲,列出这些歌曲的流行排行榜。
有一个星期日迈克尔和他的朋友在一起玩得太久了以致于未能看到新的流行榜。他非常失望,但是不久他就发现下周至少可以部分地建立出流行榜。除了每首歌曲的
位置,排行榜还根据这些歌曲上周的排行列出了它们排行变动的信息,更精确地说,从这周起,不管那首歌是继续排在原位,还是排名上升或排名下降,都会给出一
点说明。
编写程序,根据给定的流行榜帮助迈克尔推断出上周可能的排行榜。
标签:
时间限制: 1 Sec 内存限制: 128 MB
提交: 45 解决: 14
[提交][状态][讨论版]
5
HIGHHOPES
UP
LOWFEELINGS
UP
UPANDDOWN
DOWN
IAMSTILLSTANDING
DOWN
FOOLINGAROUND
DOWN
UPANDDOWN
IAMSTILLSTANDING
FOOLINGAROUND
HIGHHOPES
LOWFEELINGS
【分析】先排位置不变的,再排下降的,再排上升的
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <climits> #include <cstring> #include <string> #include <set> #include <map> #include <queue> #include <stack> #include <vector> #include <list> #include<functional> #define mod 1000000007 #define inf 0x3f3f3f3f #define pi acos(-1.0) using namespace std; typedef long long ll; const int N=105; const int M=150005; int vis[N]; int id[N]; map<string,int>q; map<int,string>p; int n,m,x=1; int ans,maxn=0,sum=0; struct man { string name; string change; } a[N]; int dp[N]; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { cin>>a[i].name>>a[i].change; if(a[i].change=="SAME")q[a[i].name]=i,p[i]=a[i].name,vis[i]=1; } for(int i=1; i<=n; i++) { if(a[i].change=="DOWN") { for(int j=x;; j++) { if(!vis[j]) { q[a[i].name]=j; p[j]=a[i].name; vis[j]=1; x++; break; } } } } for(int i=1; i<=n; i++) { if(a[i].change=="UP") { for(int j=x;; j++) { if(!vis[j]) { q[a[i].name]=j; p[j]=a[i].name; vis[j]=1; x++; break; } } } } for(int i=1;i<=n;i++)cout<<p[i]<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/jianrenfang/p/5771249.html