计科陈冠希


私信TA

用户名:uq_80401439734

访问量:793

签 名:

自我感觉很帅

等  级
排  名 138
经  验 7263
参赛次数 10
文章发表 5
年  龄 99
在职情况 学生
学  校 西北师范大学
专  业 计算机科学与技术

  自我简介:

PUA被干爆了

解题思路:记住是环形的晾衣杆,直接不用思考,选择循环链表,虽然单链表也可以,但是怕出错,直接模拟每次晾衣服就OK

注意事项:每次记得清除上一组的数据,防止WA(wrong answer)

参考代码:

#include<iostream>//直接循环链表模拟,直接当暴力模拟党 一遍过 
using namespace std;
struct Node
{
	int NO; //代表第几个夹子 
	int ocp=0;//占用的情况 
	struct Node* next;//链表节点指针,指向下一个 
};
int main()
{
	int n;cin>>n;//有多少个夹子 
	Node *head=new Node;
	head->next=head;
	head->NO=1;//初始化头节点 直接把他当作第一个夹子 
	for(int i=n;i>=2;i--)
	{
		Node* temp=new Node;
		temp->next=head->next;
		head->next=temp;
		temp->NO=i;//通过尾插法插入链表节点,所以i会倒序 细品 
	}
	int m;//m个数据 
	while(cin>>m)
	{
		Node* p=head;
		while(m--)
		{
			int x;cin>>x;//衣服长度 
			while(x)
			{
				p->ocp=1;
				p=p->next;
				x--;
			}
			p->ocp=2;//此时刚好p指向中间隔着的夹子,直接设置ocp为2即可 
			p=p->next;//继续指向下一个夹子 
		}
		int idx;cin>>idx;//需要查询的节点的下标 
		p=head;
		while(p->NO!=idx) p=p->next;//找到我们的下标 
		cout<<p->ocp<<endl;//直接输出他的占用情况 
		p=head;
		while(p->next!=head)
		{
			p->ocp=0;//记得每次一组数据求完要清空上一组的数据 
			p=p->next;
		}
		p->ocp=0;//最后一个节点还没清清除,再手动清除就OK 
	}
	return 0;
}

没有思路可言,直接逻辑模拟

 

0.0分

2 人评分

  评论区