首页 > 其他分享 >洛谷P1013 [NOIP1998 提高组] 进制位

洛谷P1013 [NOIP1998 提高组] 进制位

时间:2023-08-29 09:23:58浏览次数:48  
标签:map 洛谷 进制 字母 双位 P1013 NOIP1998

P1013 [NOIP1998 提高组] 进制位

P1013题目传送门

这是一道提高+/省选-的蓝题,有亿点点难度,我们先分析一下。

分析

字母的数量等于进制的大小,判错的时候,可以看一下那个表格右下角的一个等腰三角形,就会发现有一个由两位字母组成的三角形。

我们验算一下,对于 \(L\),在该三角形的双位字母中的个位中出现了三次,则

\[4-1-3=0 \]

\(L\) 代表的就是零了,然后依次验算 \(n-1-c\),\(c\) 表示次数,发现都等于实际上的进制数字。

然后我们依旧可以发现,在 \(L\) 这一行里面,没有双位字母出现,所以我们可以给 \(L\) 判 \(0\),就这样依次查下去,就会发现,下一行, \(K\) 有一个双位字母,然后 \(K\) 是 \(1\),等等,依此类推。

我们以上面两条作为判错依据,可以用 map 映射来统计次数,会更加便捷。

AC Code

#include <iostream>
#include <map>
using namespace std;
map<char, int> a;
map<char, int> total;
char le[10];//letter
string x, y;
int main()
{
    int n, i, j;
    cin >> n;
    cin >> x;
    for (i = 1; i <= n - 1;i++) {
        cin >> x;
        le[i] = x[0];
    }//第一行
    for (i = 1; i <= n - 1;i++) {//这是从第二行到第n-1行的意思
        for (j = 1; j <= n;j++) {
            cin >> x;
            if (x==y&&j!=1&&j!=2) {
                //第一列是键,第二列单列无法比较
                cout << "ERROR!";
                return 0;
            }
            y = x;
            if (x.size()==2) {
                a[x[1]]++;//计算该字母在两位数个位上的个数,具体见表的右下角等腰三角形内
                total[le[i]]++;//第一行相当于第一列,计算该字母两位数的个数
            }
        }
    }
    for (i = 1; i <= n-1;i++) {//对应着上面的1到n-1,这是n-1个字符的意思
        if (total[le[i]]!=n-2-a[le[i]]) {//字母总个数为n-1  
            cout << "ERROR!";
            return 0;
        }
    }
    for (i = 1; i <= n-1;i++) cout << le[i] << '=' << total[le[i]]<<' ';
    cout<<endl<< n - 1;
    return 0;
}
//求通过

标签:map,洛谷,进制,字母,双位,P1013,NOIP1998
From: https://www.cnblogs.com/cxy-xlf-1003/p/17663878.html

相关文章

  • 洛谷P5865 [SEERC2018] Tree
    P5865[SEERC2018]Tree题目传送门分析本题不难,只要枚举即可。假设两点之间的距离为树的端点,然后再去枚举其他点,符合的加入集合。若黑色点的个数超出了定义个数,那么就更新一遍。最后求最小值。ACCode:#include<bits/stdc++.h>//保命万能头usingnamespacestd;//命名空......
  • 【LGR-156-Div.3】洛谷网校 8 月普及组月赛 I & MXOI Round 1 & 飞熊杯 #2(同步赛)
    【LGR-156-Div.3】洛谷网校8月普及组月赛I&MXOIRound1&飞熊杯#2(同步赛)\(T1\)luoguP9581宝箱\(100pts\)水题,模拟即可。intmain(){ inta,b,ans=0; cin>>a>>b; if((a<0&&b<0)||(a>0&&b>0)) { cout<<max(abs(a),abs......
  • 【主席树】洛谷 P3834 可持久化线段树 2
    【主席树】洛谷P3834可持久化线段树2题目链接:https://www.luogu.com.cn/problem/P3834主席树是可持久化线段树的一种,也叫做可持久化权值线段树,主要可以用来O(logn)求静态区间的第k小数。总所周知,普通线段树每次修改会遍历logn个点,那么我们在每次修改时都把这logn个点复制一份......
  • 洛谷100题计划 (15/100)
    洛谷100题计划(15/100)P1094[NOIP2007普及组]纪念品分组-洛谷|计算机科学教育新生态(luogu.com.cn)要使得分组最少,其实就是要让一个大的和一个小的放一起,如果大的和小的一起放超过了\(w\),那大的就应该单独放,所以排完序之后,我们可以用双指针从两边寻找可以放一起的......
  • 洛谷100题计划(10/100)
    洛谷100题计划(10/100)P1031[NOIP2002提高组]均分纸牌-洛谷|计算机科学教育新生态(luogu.com.cn)因为第\(1\)堆只能移动到第\(2\)堆,且第\(N\)堆只能移动到第\(N-1\)堆,所以直接从左边往右边转移就行,这里是都减了一个平均数,看所有堆都差多少,如果左右两个都没过平均数......
  • 【题解】洛谷 P1002 [NOIP2002 普及组] 过河卒
    原题链接解题思路这是一道经典的动态规划题目。如果尝试使用深度优先搜索(dfs)或广度优先搜索(bfs)做就会获得TLE(注意数据范围)。于是我们想到了更为高级的动态规划(DynamicProgramming,dp)。简略介绍动态规划算法的核心思想:把原问题分解为相对简单的子问题的方式求解复杂问题。......
  • 洛谷集合题单
    发现自己的基础代码能力还有待提高【数据结构1-3】集合-题单-洛谷|计算机科学教育新生态(luogu.com.cn)P5250【深基17.例5】木材仓库-洛谷|计算机科学教育新生态(luogu.com.cn)学习set的使用搬个知乎的STL教程(九):C++STL常用容器之set/multiset-知乎(zhihu.c......
  • 树链剖分 | 洛谷 P4114 Qtree1
    前言题目链接:洛谷P4114Qtree1前置知识:树链剖分题意给定一棵树,有修改边权和查询两点之间边权最大值两种操作,对于每个查询输出结果。解析已经在前置博客里提到,树链剖分可以将树上的任意一条路径划分成不超过\(O(\logn)\)条连续的链,保证划分出的每条链上的节点DFS序......
  • 普及模拟2 +【LGR-155-Div.3】洛谷基础赛 #3 &「NnOI」Round 2
    普及模拟2\(T1\)地址\(0pts\)简化题意:判断一个\(IP\)地址是否合法(数据保证字符串中存在且仅存在4个被字符分开的整数)#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definesortstable_sort#defineendl'\n'chars[100];intmain(){ freope......
  • 【洛谷 1157】组合的输出
    #组合的输出##题目描述排列与组合是常用的数学方法,其中组合就是从$n$个元素中抽出$r$个元素(不分顺序且$r\len$),我们可以简单地将$n$个元素理解为自然数$1,2,\dots,n$,从中任取$r$个数。现要求你输出所有组合。例如$n=5,r=3$,所有组合为:$123,124,125,134,135,145,......