7.11补题

CodeForces - 1249B2 *
每个数都有一个对应的数字p,每一天第i个人的书给pi,求书回到自己手上需要的天数。

#include<bits/stdc++.h>
#define N 200010
using namespace std;
int kds[N];
bool vis[N];
map<int,int> mp;
vector<vector<int>> v;
vector<int> vv;
void dfs(int index){
	if(vis[index]) return;
	vis[index]=true;
	mp[index]=v.size();
	vv.push_back(kds[index]);
	dfs(kds[index]);
}
int main(){
	int q;
	cin>>q;
	for(int i=0;i<q;i++){
		int n;
		cin>>n;
		memset(kds,0,sizeof(kds));
		memset(vis,false,sizeof(vis));
		mp.clear();
		v.clear();
		for(int j=1;j<=n;j++) cin>>kds[j];
		for(int j=1;j<=n;j++){
			if(vis[j]) continue;
			vv.clear();
			dfs(j);
			v.push_back(vv);
		}
		cout<<v[mp[1]].size();
		for(int j=2;j<=n;j++) cout<<' '<<v[mp[j]].size();
		putchar('\n');
	}
	return 0;
}

CodeForces - 1249C1
给出一个数,找出一个不小于他且可用3的次方的和表示的数(每个3的次方的系数只能是1)

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int nn=n;
        int cnt=0;
        while(nn!=0){
            nn/=3;
            cnt++;
        }
        int sum=0;
        for(int i=cnt;i>=0;i--)
            sum+=pow(3,i);
        for(int i=cnt;i>=0;i--)
        {
            if(sum-pow(3,i)>=n)
                sum-=pow(3,i);
        }
        cout<<sum<<endl;
    }
    return 0;
}

这题我试了好久都没成功,看了别人的代码我觉得我的思路是有问题的,我是想着一次成型,一次循环就排除不要的3次幂,而大佬是先把所有的3次幂加起来,最后再一个一个减去,大大降低了难度。

CodeForces - 1249C2
同上,数据变大了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        ll n;
        scanf("%lld",&n);
        ll sum=0,x=1;
        while(sum<n)
        {
            sum+=x;
            x=x*3;
        }
        while(x)
        {
            if(sum-x>=n)
                sum-=x;
            x=x/3;
        }
        printf("%lld\n",sum);
    }
    return 0;
}

和简单版本的思路相同,但是因为pow返回值的类型不能超int,但本题需要long long

CodeForces - 1249D1 *
给出n个区间,每个区间有左右端点(闭区间),每个区间 的覆盖定义为区间里的整数个数,问最少去掉哪几个区间可以使没所有点被区间覆盖的次数少于等于k次

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int maxx=2e2+10;
struct node{
	int x,y;
	bool operator<(const node &a)const{
		if(y==a.y) return x<a.x;
		else return y<a.y;
	}
}p[maxx];
int a[maxx],vis[maxx];
int n,k;

int main()
{
	scanf("%d%d",&n,&k);
	memset(a,0,sizeof(a));
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&p[i].x,&p[i].y);
		a[p[i].x]++;
		a[p[i].y+1]--;
	}
	for(int i=1;i<=200;i++) a[i]+=a[i-1];
	int ans=0;
	for(int j=1;j<=200;j++)
	{
		while(a[j]>k)
		{
			int tmp=0;
			for(int i=1;i<=n;i++) if(p[i].x<=j&&p[i].y>=j&&(tmp==0||p[i].y>p[tmp].y)&&vis[i]==0) tmp=i;
			vis[tmp]=1;
			ans++;
			for(int i=p[tmp].x;i<=p[tmp].y;i++) a[i]--;
		}
	}
	cout<<ans<<endl;
	for(int i=1;i<=n;i++) if(vis[i]) cout<<i<<" ";cout<<endl;
	return 0;
}

求出每一个点的覆盖次数,遍历所有的点,如果它是坏点的话,就遍历目前没有删除的线段,寻找一个右区间最远的并且覆盖这个点的线段将之删除

CodeForces - 1249D2 *

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<set>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=2e5+10;
int n,k;
struct Node
{
	int y;
	int idx;
};
bool operator<(Node a,Node b)//排序
{
	if(a.y!=b.y)
		return a.y<b.y;
	return a.idx<b.idx;
}
vector<Node> g[N];
vector<int> ans;

int main()
{
	int x,y;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		Node p;
		scanf("%d%d",&x,&y);
		p.y=y;
		p.idx=i;
		g[x].push_back(p);
	}
	set<Node> s;
	for(int i=1;i<N;i++)
	{
		while(s.size()&&(*s.begin()).y<i)//没有被覆盖的区间删除
			s.erase(*s.begin());

		for(int j=0;j<g[i].size();j++)//存入可覆盖区间
			s.insert(g[i][j]);

		while(s.size()>k)//判断该点被覆盖次数是否超过 k
		{
			ans.push_back((*s.rbegin()).idx);//删除的区间存下
			s.erase(*s.rbegin());
		}
	}
	printf("%d\n",ans.size());
	int len=ans.size();
	for(int i=0;i<len;i++)
	{
		printf("%d%c",ans[i],i==len-1?'\n':' ');
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值