1. 程式人生 > >Codeforces 897D. Ithea Plays With Chtholly (交互)

Codeforces 897D. Ithea Plays With Chtholly (交互)

space pro 次數 ble 最大 scan 題意 def src

題目鏈接:D. Ithea Plays With Chtholly

題意:

  給你n張紙,在紙上寫字(在 1 - c之間)可以寫m次數 (技術分享圖片,)。(主要是交互,讓你判斷)

題解:

  首先,看到m>=n*c/2,我們假設從1位置放入數據,如果放入的數據大於前面已經放入的數據那就往後排小於就替換。這樣放的話,每個位置替換最大的次數是C,所以最大的次數總數是n*c。發現正好差了一倍。所以我們可以從兩邊放入,(小於c/2從1放入,大於c/2從N位置放入)這樣每個位置替換的最大次數就是c/2,就正好可以過了。(要註意這次題目必須刷新緩沖區(好像是~英文不好~~~),要用fflush或是cin的endl)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAX_N = 1e3+9;
 4 int vec[MAX_N];
 5 int main()
 6 {
 7     int N,M,T,c;
 8     memset(vec,0,sizeof(vec));
 9     cin>>N>>M>>c;
10     int t;
11     int num = 0;
12     while(~scanf("%d",&t))
13     {
14         if
(t <= c/2) 15 { 16 int pos = 1; 17 for( pos = 1;pos <= N;pos++) 18 { 19 if(vec[pos] == 0) num++; 20 if(vec[pos] == 0 || vec[pos] > t) 21 { 22 vec[pos] = t; 23 break
; 24 } 25 } 26 cout<<pos<<endl; 27 } 28 else 29 { 30 int pos = N; 31 for( pos = N;pos >= 1;pos--) 32 { 33 if(vec[pos] == 0) num++; 34 if(vec[pos] == 0 || vec[pos] < t) 35 { 36 vec[pos] = t; 37 break; 38 } 39 } 40 cout<<pos<<endl; 41 } 42 if(num == N) break; 43 } 44 return 0; 45 }

Codeforces 897D. Ithea Plays With Chtholly (交互)