求调试,自我感觉没问题
查看原帖
求调试,自我感觉没问题
922780
zzhjidetuideng楼主2024/7/10 12:00
#include<bits/stdc++.h>
#define int long long
#define SPACE putchar(' ');
#define ENDL putchar('\n');

const int N =1e5+10;

using namespace std;

int read(){
	int x=0,f=1;
	char c=getchar();
	while(c>'9' || c<'0'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0' && c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}

void write(int x){
	if(x<0){
		putchar('-');
		x*=-1;
	}
	if(x>9)write(x/10);
	putchar(x%10+'0');
}

struct line{
	int k;//斜率
	int b;//位移 
	int cnt;//直线个数 
}a[N];

int n, t;

void print();

signed main(){
	
	n=read();
	for(int i=1;i<=n;i++){
		int choose, ki, bi;
		int ans=0;
		//输入 
		choose=read();
		ki=read(),bi=read();
		
		//第一种 
		if(choose == 1){
			bool deposit_ = false;
			
			//存入数组 
			for(int i=1;i<=t;i++){
				if(a[i].k == ki && a[i].b == bi){//如果有一摸一样的直线就直接存 
					a[i].cnt++;
					deposit_=true;
					break;
				}
			}
			if(!deposit_){//存储 
				t++;
				a[t].k=ki;
				a[t].b=bi;
				a[t].cnt=1;
			}
//				print();
		}
		
		//第二种 
		if(choose==2){
			//查询数量 
			for(int i=1;i<=t;i++){
				if(a[i].k != ki){//斜率不相等 -> 相交 
					ans += a[i].cnt;
				}
			}
//				print();
			write(ans);//输出ans 
			ENDL;
			
		}
		
		//第三种 
		if(choose == 3){
			//擦除 
			for(int i=1;i<=t;i++){
				if(a[i].k != ki || (a[i].k == ki && a[i].b == bi)){//相交 或 重合 
					//移除 
					swap(a[i],a[t]);
					t--;
				}
			}
//				print();
		}
		
	}
	
	return 0;
}
/*
10
1 1 0
1 1 0
2 1 1
2 1 0
2 2 5
3 1 0
2 2 5
1 2 3
1 3 4
2 3 5
-----------
0
0
2
0
1
*/
void print(){
	ENDL;
	for(int i=1;i<=t;i++){
		printf("y=%lldx+%lld %lld",a[i].k,a[i].b,a[i].cnt);
		ENDL;
	}
	ENDL;
}

还有一个问题,结构体存储可以怎样减少时间复杂度?感谢可以帮忙调试的大佬OrzOrz

2024/7/10 12:00
加载中...