天梯赛6+2020/11/20平时训练

7-11 集合相似度
题解:
主要就是用set
在查找一个数是否属于set数组之中时可以用find函数查找而不一定非要重新建一个set数组输入进去
之前一直超时现在改用find就不超时了

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    set<int> s[n+1];
    for(int i=1;i<=n;i++)
    {
        int k;
        cin>>k;
        while(k--)
        {
            int t;
            cin>>t;
            s[i].insert(t);
        }
    }
    int m;
    cin>>m;
    while(m--)
    {
        int a,b;
        cin>>a>>b;
        int a1=s[a].size();
        int a2=s[b].size();
        int count=0;
        for(auto it=s[a].begin();it!=s[a].end();it++)
        {
            if(s[b].find(*it)!=s[b].end())
            {
                count++;
            }
        }
        printf("%.2lf%\n",count*100.0/(a1+a2-count));
    }
}

7-12 列车调度
题解:
用set里面的upper_bound(x)函数
可以具体看大佬的博客
lower_bound与upper_bound()用法笔记
STL——upper_bound && lower_bound
lower_bound和upper_bound是C++ STL中提供的函数
操作对象可以是vector、set以及map
upper_bound(i):返回map中第一个大于key的迭代器指针
lower_bound(i):返回map中第一个大于或等于key的迭代器指针
在set中使用

#include<iostream>
#include<set>
using namespace std;
 
int main()
{
	set<int>s;
	set<int>::iterator it1,it2,it;
	
	for(int i=1;i<10;++i) s.insert(i);
	
	it1=s.lower_bound(3);
	it2=s.upper_bound(6);
	
	cout<<*(it1)<<" "<<*(it2)<<endl;
	
  	//由于set中没有像vector中那样排序的概念,因此itlow - myset.begin()是错误的
  	
  	s.erase(it1,it2);// 删除区间内的元素,区间左闭右开
  	
  	for(it=s.begin();it!=s.end();++it)
  		cout<<*it<<" ";
  	cout<<endl;
 
  return 0;
}

这里用的是upper_bound

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,x;
    cin>>n;
    set<int>S;
    for(int i=0,x;i<n;i++)
    {
        cin>>x;
        auto X=S.upper_bound(x);
        S.insert(x);
        if(X!=S.end())S.erase(X);
    }
    cout<<S.size();
    return 0;
}

7-5 整除光棍
题解:
这是关于大数的一个问题
可以用java里面的大数类
Java高新技术——大数操作(BigInteger、BigDecimal)

package ustc.lichunchun.bigdataapi;
 
import java.math.BigInteger;
 
public class BigIntegerDemo1 {
 
	public static void main(String[] args) {
		BigInteger bi1 = new BigInteger("123456789") ;	// 声明BigInteger对象
		BigInteger bi2 = new BigInteger("987654321") ;	// 声明BigInteger对象
		System.out.println("加法操作:" + bi2.add(bi1)) ;	// 加法操作
		System.out.println("减法操作:" + bi2.subtract(bi1)) ;	// 减法操作
		System.out.println("乘法操作:" + bi2.multiply(bi1)) ;	// 乘法操作
		System.out.println("除法操作:" + bi2.divide(bi1)) ;	// 除法操作
		System.out.println("最大数:" + bi2.max(bi1)) ;	 // 求出最大数
		System.out.println("最小数:" + bi2.min(bi1)) ;	 // 求出最小数
		BigInteger result[] = bi2.divideAndRemainder(bi1) ;	// 求出余数的除法操作
		System.out.println("商是:" + result[0] + 
			";余数是:" + result[1]) ;
	}
}

用C++的话就是要用模拟除法
模拟除法,每次取一位商,余数加下一位,当商为0时,不保存
模拟除法的算法思想:
1=d1=q⋅x+r(0≤r<x),其中q为商r为余数
*11=d2=10⋅d1+1=10q⋅x+(10r+1),(0<10r+1<10x),*⋯,
所以高一位的商值若由上一步确定了,往后低位的上商都不会对其造成影响,因为每位的商最多为9.因此整数除法可自高位开始逐位确定商值.

#include <stdio.h>
int main()
{
    char a[1000];//创建存表
    int len=0,count=0;
    int n;
    int t=1;
    scanf("%d",&n);
    while(1)
    {
        count++;
        if(len||t/n)//商第一位为0,不存入数组中
        {
            a[len]='0'+t/n;//把数字变为字符存储
            len++;
        }
        t%=n;//取余数
        if(t==0)//判断余数是否为零,余数为0结束
        {

            a[len]='\0';//输入数组终止符
            printf("%s %d",a,count);
            break;
        }
        t=t*10+1;
    }
    return 0;
}
#include<bits/stdc++.h>
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int main()
{
	int x,i,n=0,flag=0;
	cin>>x;
	for(i=1;;i++)
	{
		n=n*10+1;
		if(n>=x)
		{
			flag=1;
			cout<<n/x;
		}
		else if(flag==1) cout<<0;
		n=x%n;
		if(n==0) break;
	}
	cout<<" "<<i<<endl;
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值