NOI字符串

本文讲述了作者在解决一个编程问题时,如何从使用数组可能导致漏算的问题转向使用结构体NOI_list存储NOI组合,以确保计数的准确性,并提到最终实现的四重循环代码。作者虽然已实现但寻求优化解决方案。
摘要由CSDN通过智能技术生成

题目如下:

(输出描述貌似错了......我不到啊)

很简单,只需要找的时候再额外加上一个数据来表示它们组成“NOI”时的位置然后检测一下找到的情况有没有被记录,如果没有就记录就记录,然后次数++;如果有了就跳过接着找

一开始我想到用数组记录,一维数组,值通过计算得到,比如NOI三个数,N位置下标乘一百,O位置下标乘十,I下标不处理然后加到一起。但是这样一来就会导致漏算,比如N下标为2,O下标为5,I下标为3,就是253,但是N下标为1,O下标为13,I下标为23,也是253

怎么说呢,然后就想到可以用结构体

struct NOI_list{
	int one;
	int two;
	int thr;
}lists[2333];

这样就唯一了

最后代码如下,可能相对很复杂(菜就多练)

#include<bits/stdc++.h>
using namespace std;
struct NOI_list{
	int one;
	int two;
	int thr;
}lists[2333];
//每种NOI的组合 
int N,s;
string A;
int main(){
	cin>>N;
	cin>>A;
	for(int i=0;i<N;i++){
		if(A[i]=='N'){
			for(int j=i+1;j<N;j++){
				if(A[j]=='O'){
					for(int k=j+1;k<N;k++){
						if(A[k]=='I'){
							int o=0;
							for(int l=0;lists[l].one!=0&&lists[l].thr!=0&&lists[l].two!=0;l++){
								if(lists[l].one==i+1&&lists[l].two==j+1&&lists[l].thr==k+1){//已经算过了 
									o++;
								}
							}
							s++;
							lists[o].one=i+1;
							lists[o].two=j+1;
							lists[o].thr=k+1;
						}
						
					}
				}
			}
		}
	}
	cout<<s;
	return 0;
}

用了四重循环......

算了,至少提交了是AC,但是还是要加以优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值