【练习八 结构体(强化)编程题4. 看电影】
【問題描述】
? ? ? ?弗蘭大學正在舉辦一場重要的國際學術會議,出席會議的?n?位科學家來自不同的國家,每位科學家都只熟悉一種語言,為方便起見,世界上所有的語言用1~1000的數字編號來列出。
? ? ? ?晚上,主辦方安排所有科學家去看電影,電影院里有?m?部電影,每部電影可以用兩個不同的整數來描述,即音頻語言和字幕語言的編號??措娪暗目茖W家,如果他熟悉電影的音頻語言,他會非常高興,如果他熟悉字幕的語言,他基本上滿意,如果他兩種都不熟悉,他會感到不滿意(請注意,每部電影的音頻語言和字幕語言總是不同的)。?
? ? ? ?科學家們決定一起去看同一部電影。你必須幫助他們選擇電影,使得非常高興的科學家的數量是最大的,如果有多部這樣的電影,在其中選擇能使基本滿意的科學家的數量最大,如果還有多部,則全部輸出。如果沒有這樣的電影,則輸出"unsatisfied"。
【輸入形式】
? ? ? ?輸入的第一行為一個正整數?n?(1?≤?n?≤?200000)? ,表示科學家的數量。
? ? ? ?第二行為?n?個正整數a1、a2、...、an?(1?≤?ai?≤?1000),其中ai?表示第?i?位科學家熟悉的語言編號。
? ? ? ?第三行包含一個正整數m(1?≤?m?≤?200000),表示電影院里的電影數量,編號從1~m。
? ? ? ?第四行包含?m?個正整數?b1,?b2,?...,?bm?(1?≤?bj?≤?1000),其中?bj?表示第??j?部電影的音頻語言。
? ? ? ? 第五行包含?m?個正整數?c1,?c2,?...,?cm?(1?≤?cj?≤?1000),其中?cj?表示第??j?部電影的字幕語言。
? ? ? ???輸入保證?bj?≠?cj? 。
【輸出形式】
? ? ? ?輸出為若干整數,從小到大,表示科學家們可以去選擇去看的電影的編號。如果沒有這樣的電影,則輸出"unsatisfied"。
【樣例輸入】
3 2?3?2 2 3?2 2?3【樣例輸出】
2【樣例說明】
【評分標準】
【說明】代碼很長,建議自己再思考
#include <iostream>using namespace std;struct movie{int audio;int caption;int sumA=0;int sumC=0;int I; }; int main() {int n,m,j,i;cin>>n;int*scientist=new int[n];for(j=0;j<n;j++){cin>>scientist[j];}cin>>m;movie * a=new movie[m];for(j=0;j<m;j++){cin>>a[j].audio;a[j].I=j+1;}for(j=0;j<m;j++){cin>>a[j].caption;}int audio=0,caption=0;for(j=0;j<n;j++){for(i=0;i<m;i++){if(a[i].audio==scientist[j]){a[i].sumA++;}}}for(j=0;j<n;j++){for(i=0;i<m;i++){if(a[i].caption==scientist[j]){a[i].sumC++;}}}int A=1,C=1;for(i=1;i<m;i++){for(j=0;j<i;j++){if(a[i].sumA>a[j].sumA){movie b=a[i];a[i]=a[j];a[j]=b;}}}for(i=1;i<m;i++){for(j=0;j<i;j++){if(a[i].sumC>a[j].sumC&&a[i].sumA==a[j].sumA){movie b=a[i];a[i]=a[j];a[j]=b;}}}for(i=0;i<m;i++){if(a[i].sumA==a[i+1].sumA){A++;}else{break;}}for(i=0;i<m;i++){if(a[i].sumC==a[i+1].sumC){C++;}else{break;}}int g=min(A,C);if(a[0].sumA==0&&a[0].sumC==0){cout<<"unsatisfied";}else{for(i=0;i<g;i++){cout<<a[i].I<<" ";}}return 0; }總結
以上是生活随笔為你收集整理的【练习八 结构体(强化)编程题4. 看电影】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双月数据生成及其常见算法(二)
- 下一篇: python新手入门-------字符串