程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> codeforces 250C Movie Critics

codeforces 250C Movie Critics

編輯:C++入門知識

題目:大意是說  Valentine在想要去看電影,總共n場電影,每場電影都有一個對應的genre值x (1?<=x?<=k),但是  Valentine不想把所有的電影都看完,他想把其中某些genre值=x的電影去掉,只看剩下的電影,但是還有一個問題:就是每場電影的時間是固定的,所以他必須按順序來觀看,當上一場電影的genre值與下一場的genre值不一樣的時候, 

Valentine的憤怒值就會+1(初始為0),題目要求出去掉genre值為x的電影後,他的憤怒值最小的x。

方法:仔細想了一下之後會發現,需要使用暴力把1-K之間的值遍歷一下,求出所有的憤怒值,但是數據量太大,這樣肯定會超時,所以就觀察一下,如果不去掉任何電影,那麼假設他的憤怒值為Y,去掉後為y,那麼就是讓我們求Y-y的值最大的那個x。讓我們來看一個例子:1 3 2,假設要去掉的x=3,根據題目的描述,去掉3後兩邊的電影值還是不同,所以這樣他的總憤怒值Y應該-1,下一個例子:1 3 1,同樣去掉3之後,發現兩邊的電影值相同,那麼他的憤怒值應該-2。這樣我們就了解了這道題的解決方法。

優化:題目中會出現例如:1 3 3 2的例子,也就是去掉3的時候,還要去掉它後面與它值相同的電影,這樣就不如在加載數據的時候把數據直接改為1 3 2,這樣會減少很多麻煩。

代碼:

#include 
#include 
#include 
using namespace std;
int main()
{
     int n,k,x,t=1,s[100010],d[100010];
     memset(d,0,sizeof(d));
     cin>>n>>k;
     s[0]=0;
      for(int i=1;i<=n;i++)
       {
           cin>>x;
           if(x!=s[t-1]) s[t++]=x;
       }
       s[0]=s[t]=0;
     for(int i=1;id[p]) p=i;
     cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved