pat-1063

#include<iostream>
#include<vector>
#include<unordered_set>
#include<algorithm>
using namespace std;

int main(){
	int n,temp,m,_1,_2,num=0,temp1;
	scanf("%d",&n);
	unordered_set<int> v[n+1];
    for(int i=1;i<=n;i++){
		scanf("%d",&temp);
		for(int j=0;j<temp;j++){
			cin>>temp1;
		v[i].insert(temp1);
	    }
	    }
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		scanf("%d %d",&_1,&_2);
	
		num=0;//num忘记条件重置(注意) 上面涉及的所有东西都要条件重置 ,而且位置要在处理完整个问题之后 
		int k=v[_2].size();
	    yu.clear(); 
		for( auto it=v[_1].begin();it!=v[_1].end();it++){
			if(v[_2].find( *it)!=v[_2].end() ){
				num++;
				//条件重置 
			}
			else
			k++;
		}double ans=(num*1.0/k)*100;
         printf("%.1lf%\n",ans);
	}
	return 0;
} 

总结

1.本来用的方法特别麻烦,又求快导致有一些对题目的理解不充分 

2.当我改完,以前的方法已经删了,导致不能找以前的错误,这点以后要注意

3.如果能用现有的东西解决的,尽量不要再弄一个别的东西代替,容易出问题

3.如果必须用到vector的find则只能用algorithm的find(起,终,查找元素)

4.本题根本用不到重复元素,看看能不能先把数据处理一下,需不需要重复元素,数的话直接set去掉另外注意这种用法vector<set<int>>  mm;

如果是字符串那只能用一个set来控制不重复输入或者计数

5.不要用num[i]++,因为num后续的还要使用不能改变应该引一个参数

别光图省事,是不是需要引参数,

当多组query重复检测时先明确哪些需要条件重置(一般是存放结果或辅助的出结果的),哪些自己本身不能变(一般是那些一开始整理的通用信息)

4.这道题给我最大的经验是    东西越简单,越可靠!

英语

问题  如何避免5中的错误  写注释将下面用到的信息用不同的标记分类 

通用  辅助 +结果 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值