首页 > 其他分享 >NOIP 时间复杂度

NOIP 时间复杂度

时间:2022-11-06 11:44:55浏览次数:52  
标签:used NOIP int 复杂度 else 时间 VAR cnts define

思路

写出如下的伪代码:

psedu

然后实现出来就是这样:

#include <bits/stdc++.h>
using namespace std; 
#define MAXN 32005
#define F(i, a, b) for(int i=a; i<=b;i++)
#define Fd(i, a, b) for(int i=a;i>=b;i--)

void solve();
int main(){
	int T; cin>>T; while(T--) {
		solve();
	}
}

vector< vector<int > > vec;
bool used[MAXN];

pair<int, int> fact[MAXN];
int skip[MAXN];
int cntf = 0, cnts = 0, factnow = 0, factmx = 0, err=0;


void solve(){
	memset(used, 0, sizeof used);
	vec.clear();
	cntf = 0, cnts = 0, factnow= 0, factmx =0, err=0;
	int n; string c; cin>>n>>c;
	int ans;
	if(c[2]=='1'){
		ans = 0;
	}else{
		if(c[5] == ')'){
			ans =  c[4]-'0';
		}else{
			ans = (c[4]-'0')*10+(c[5]-'0');
		}
	}
	F(i, 1, n){
		char op=-1, va=0, s[5], e[5];
		cin>>op;
		if(op =='F') {
			scanf(" %c %s %s", &va, s, e);
			int iop, iva, is, ie;
			iop = 1;
			iva = (int) va;
			if(s[0] == 'n') is = 101; else is = atoi(s);
			if(e[0] == 'n') ie = 101; else ie = atoi(e);
			
			
			int exp; 
			if(is > ie) exp = -1;
			else if((is <= 100 && ie <= 100) || is == ie){
				exp = 0;
			}else if(ie == 101){
				exp = 1;
			}else {
				assert(0);
			}
			// printf("Added %d %d %d \n", iop, iva, exp);
			vec.push_back({iop, iva, exp});
		}else{
			// printf("Added %d %d %d\n", 0, 0, 0);
			vec.push_back({0, 0, 0});
		}
	}
	
	F(i, 0, n-1){
		vector<int> line = vec[i];
		#define COEFF line[2]
		#define VAR line[1]
		#define TYPE line[0]
		// printf("Now var= %d\n", VAR);
		if(COEFF == -1){
			skip[++cnts] = 1; 
			while(cnts != 0){
				i++, line = vec[i];
				
				if(i>n) {printf("ERR\n"); return;}
				if(TYPE == 1){
					if(used[VAR]==1){
						printf("ERR\n"); return;
					}else{
						used[VAR]= 1;
					}
					skip[++cnts] = VAR;
				}else if(TYPE == 0){
					used[skip[cnts]] = 0;
					cnts --;
				}else{
					assert(0);
				}
			}
		}else{
			
			if(TYPE == 1){
				if(used[VAR]==1) {
					printf("ERR\n"); return;
				}else{
					used[VAR] = 1;
				}
				fact[++cntf] = {COEFF, VAR};
				factnow += COEFF;
				factmx = max(factmx, factnow);
			}else if(TYPE == 0){
				#define NOWCMP fact[cntf].first
				#define NOWVAR fact[cntf].second
				factnow -= NOWCMP;
				used[NOWVAR] = 0;
				cntf--;
			}
		}
	}
	
	if(cntf != 0 || cnts != 0) {
		cout<<"ERR"<<endl;
		return;
	}
	// cout<<factmx <<endl;
	if(ans == factmx) {
		cout<<"Yes\n";
	}else{
		cout<<"No\n";
	}
}

标签:used,NOIP,int,复杂度,else,时间,VAR,cnts,define
From: https://www.cnblogs.com/augpath/p/16862276.html

相关文章

  • NOIP2017 逛公园 记忆化搜索|dp(已过hack数据)
    30pts可以发现,\(k=0\)的情况下,问题转化为最短路计数,即从起点\(s\)到每个点有多少最短路。跑最短路的时候顺便维护\(ans[u]\),表示从\(s\)到\(u\)的最短路方案,讨论如下:①......
  • 关于时间冗余杀手、职场PUA以及不断刷新三观的事情
    又有很长时间没在这个小博客里留下文字了,被封控在单位的第15天,在这里分享如题目中所描述的话题。一、关于时间冗余的杀手(时间都去哪了?)时间冗余的第一个杀手是:浪费时间去......
  • oh-my-zsh默认主题添加时间
    一直使用oh-my-zsh的默认主题,基本满足需要但是没有时间信息,需要经常查看别的钟表。于是就想修改一下默认主题。 1#comefromrobbyrussle2#andaddtimeatbot......
  • 2022NOIPA层联测21
    B.学数学打表只发现了连续的$(2,8)(8,30)(30,112)$似乎比较有规律的样子,通过他们算出来的$a=xy+1,b=x^2+y^2$恰好是$2^2$倍数,如果是“以3为起点的链表”就是$3^2$.但......
  • 时间 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • [Public NOIP Round #3]图同构
    点权和颜色的操作不对称,尝试转化为同类操作。对于颜色的操作可以看作:交换两点颜色,然后反色那么可以将颜色和点权绑在一起交换,最终颜色是否反色取决于路径长度的奇偶性。......
  • 「题集」Public NOIP Round #2 提高
    简单写一写题解,T3和T4还是值得一记的。恰钱注意到,\(10^9\)范围内的好数明显数量不多。我们甚至可以直接算出来:\[\sum_{k=1}^{14}\binom{30-(k+1)}{k-1}\]结合这个......
  • 【杂题汇总】NOIP 2022 杂题目录
    这里单纯的是一些题目,看到有意思的题会在这里记下来,也可以当做Todolist啦解析的话在这里[ARC147E]Examination[CF573E]BearandBowling[CF498D]TrafficJamsi......
  • 【架构】架构复杂度来源之扩展性
    复杂度来源前面已经讲了高性能和高可用,今天来聊聊可扩展性。「可扩展性」指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修......
  • Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据|附代码数据
    原文链接:http://tecdat.cn/?p=6663此示例中,神经网络用于使用2011年4月至2013年2月期间的数据预测公民办公室的电力消耗(点击文末“阅读原文”获取完整代码数据)。每日数......