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

题目链接: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 }

 

posted @ 2018-01-22 16:18  会打架的程序员不是好客服  阅读(384)  评论(0编辑  收藏  举报