zoukankan      html  css  js  c++  java
  • 洛谷 P1540 机器翻译

    https://www.luogu.com.cn/problem/P1540

    详细内容见链接。

    刚开始第一眼以为是当作字符串进行处理,后来发现将其当作数字字符串更好做。

    题目要求进行统计新单词的出现次数,那么由此考虑自然会发现存在两种情况。

    总体思路,设置两个数组marrnarr分别存储字典内容和文章单词,题目要求输入非负整数,也就是可以输入0,

    于是我将marr数组中全部赋值为-1,由于文章肯定存在单词不存在0个单词的特殊情况,

    然后便开始进行遍历,如果下一个单词不存在于字典内存中,便将其放入字典内存中,因而存在两种情况:

    第一种:字典内存大于文章单词数

    第二种:字典内存小于文章单词数并且总共的新单词数大于字典内存

    对于第一种:上述思路很容易解答出来

    对于第二种:有一种特殊情况,当字典内存满的时候,这时如题目所说需要从开始重新进行赋值,因此数组下标需要重新变成0


    代码如下:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdbool.h>
     4 int marr[105],narr[1005],m,n;
     5 bool out(int num){
     6     for(int i = 0; i < m; i ++){
     7         if(marr[i] == narr[num]){    //判断是否在字典内存中,在false,不在true 
     8             return false;
     9         }
    10     }
    11     return true;
    12 }
    13 int main(){
    14     int cnt = 0;
    15     for(int i = 0; i < 105; i ++){        //先将字典内存初始化为 -1 
    16         marr[i] = -1;
    17     }
    18     scanf("%d %d",&m,&n);
    19     for(int i = 0; i < n; i ++){
    20         scanf("%d",&narr[i]);
    21     }  
    int j = -1; 25 for(int i = 0; i < n ; i ++){ 26 if(out(i) && j != m - 1){ //字典中没有且内存没满 27 marr[++j] = narr[i]; 28 cnt++; 29 }else if(out(i) && j == m - 1){//j为m - 1的时候字典内存才算满,下一步便是下标初始化为0 30 j = -1; 31 marr[++j] = narr[i]; 32 cnt++; 33 } 34 } 35 printf("%d ",cnt); 36 return 0; 37 }
  • 相关阅读:
    java 项目的CAS搭建
    OpenStack Grizzly版本(Ubuntu 12.04)配置
    存储介质管理
    软件包管理
    终端和键盘
    Shell环境(environment)和配置(configuration)
    Linux 基本命令入门
    iptables的原理及使用
    移动小球 (sicily 1934) (双向链表)
    1010 Tempter of the Bone (杭电) (图Graph)
  • 原文地址:https://www.cnblogs.com/pureayu/p/12246537.html
Copyright © 2011-2022 走看看