算法入门【NC16589】[NOIP2010]机器翻译

[NOIP2010]机器翻译

https://ac.nowcoder.com/acm/contest/20960/1003

思路

Use simulation to solve the problem.
two situations to have access to disk

  1. if word is not saved in memeory, read disk
  2. if memeory is full, desert the earlist entry element and save the word into last of the memeory.

once u have a try on the problem, i'm convinced that you have found m is still when memeory is full. We can take advantage of it!

so the problem is resolved now. let's code now.

#include<stdio.h>
int memeory[1010];

int main() {
	int m, n, cnt;
  	scanf("%d%d", &m, &n);
  	for(int i = 1;i <= n; i ++ ){
    	int x;
      	scanf("%d",&x);
     	if(memeory[x] != 0) continue;
      	if(m > 0) {
          	memeory[x] = i;
        	m --;
          	cnt ++;
        }
      	else {
        	int min = i, pos = 0;
          	for(int j = 0; j < 1010; ++ j) {
            	if(memeory[j] != 0 && min > memeory[j]){
                	min = memeory[j], pos = j;
                }
            }
          	memeory[pos] = 0;
          	memeory[x] = i;
          	cnt ++;
        }
    }
  printf("%d", cnt);
}

u have some questions about 17-21 lines probably. introductions about them are below. once memeory is full, we have to find the earlist appearing block. so set min to i that is current index and set pos to 0 for recording the value of the word. when we have found them, we should do something about it to exclude the block on 23-25 lines.

全部评论

相关推荐

点赞 评论 收藏
分享
03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务