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