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

这是一个C++程序,用于读取用户输入的一系列字符串,并检查是否存在重复的输入。程序通过`for`循环遍历输入,使用`map`数据结构统计每个字符出现的次数,并对比每行数据的唯一性。当检测到错误(如重复输入)时,程序会输出错误信息并终止运行。程序还特别处理了表头的情况,确保了数据的正确处理。
摘要由CSDN通过智能技术生成

题目

C++:

#include<bits/stdc++.h>
#define fu(i,q,w) for(register int i=q;i<=w;i++)
#define fd(i,q,w) for(register int i=q;i>=w;i--)
using namespace std;
typedef long long ll;
inline int read(){
    int ret=0,f=1;char c;
    while((c=getchar())<'0'||c>'9')if(c=='-')f=-1;
    while(c>='0'&&c<='9')ret=ret*10+(c-'0'),c=getchar();
    return ret*f;
}
char word[10];//记录字母 
char check[10];//检查重复 
string numx,numy;//储存输入数据、检查重复 
map<char,int> two;//一行中两位数个数 
map<char,int> tone;//存字母在两位数个位出现几次 
int n;
void in(){
    n=read();
    cin>>numx;//"+"特判输入 
    fu(i,1,n-1){cin>>numx,word[i]=numx[0];}// 第一行存表头的每个字母 
    fu(i,1,n-1)//从第二行开始 
    fu(j,1,n){cin>>numx;
            
        if(j!=1&&j!=2)//表头不算
        if(numx==numy){printf("ERROR!");exit(0);}//发现重复输入一定不对 
        numy=numx; //前后比,不要全行比
        if(numx.size()==2){//统计两位数个数 
            two[word[i]]++;tone[numx[1]]++;
        }
    }
}
void solve(){
    fu(i,1,n-1)
    if(two[word[i]]!=n-2-tone[word[i]]){printf("ERROR!");exit(0);}
    //比较两种算法的结果是否相同
 	fu(i,1,n-1)
 	cout<<word[i]<<'='<<two[word[i]]<<' ';
 	printf("\n");
 	printf("%d",n-1);
 	
 	
    }
int main(){
    in();
    solve();
    return 0; 
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿Eason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值