PTA——1025 反转链表、1026 程序运行时间

1026 程序运行时间

在这里插入图片描述

解决代码

注意一下if(sec-s>=0.5) s++;不能写成>0.4了,因为[0.4,0.5)之间的值也是4舍的部分。

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long int a,b;
	cin>>a>>b;
	long double sec=1.0*(b-a)/100; 
	long long int s=sec;
	if(sec-s>=0.5) s++; 
	int ss=0,m=0,h=0;
	h=s/3600;
	m=s%3600/60;
	ss=(s%3600)%60;
	printf("%02d:%02d:%02d",h,m,ss);
	return 0;
}

1025 反转链表

在这里插入图片描述

解决代码

1.首先,我没有审清题目,地址为五位数,所以可以用int储存,从而可以用数组索引当做链表地址把链表串起来。我一开始用的str,到分离出链表这一步只能够每次迭代n个结点,TLE测试点5超时。
2.我再次没有审清题目,题目说的是每k个结点翻转一次,而不是前k个,不能好像看懂了样例就开写,应该仔细审题。
3.不得不说,reverse()很方便。

#include<bits/stdc++.h>
using namespace std;
struct node{
	int add,value,aft;
};
node no[100005];
vector<node> seq;
int main(){
	int first,n,num;
	cin>>first>>n>>num;
	int start=0;
	for(int i=0;i<n;i++){
		int x,y,z;
		cin>>x>>z>>y;
		no[x].add=x;
		no[x].value=z;
		no[x].aft=y;
	}
	//初始化数据
	int i=first;
	while(no[i].aft!=-1)
	{
		seq.push_back(no[i]);
		i=no[i].aft;
	}
	seq.push_back(no[i]);
	//分离出整条链表
	for(int i=0;i<(seq.size()-seq.size()%num);i+=num){
		reverse(seq.begin()+i,seq.begin()+i+num);
	}
	//翻转操作
	for(int i=0;i<seq.size();i++){
		if(i+1==seq.size()){
			printf("%05d %d -1",seq[i].add,seq[i].value);
			break;
		}
		printf("%05d %d %05d\n",seq[i].add,seq[i].value,seq[i+1].add);
	}
	//输出处理
}

版权声明:本文为qq_45929428原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。