圆圈舞

春天温暖的阳光照耀着大地,正是草原上的小动物们最快乐的时候。小动物们在草原上开了一个舞会,欢度这美好的时光。

舞会上最重要的一个环节就是跳圆舞曲,n只小动物手拉手围成一大圈,随着音乐跳起来。在跳的过程中,小动物们可能会变换队形。它们的变换方式是动物A松开自己右手,动物B松开自己的左手,动物A和B手拉到一起,而它们对应的松开的手(如果有的话)也拉到一起。

例如,假设有10只小动物,按顺序围成一圈,动物1的右手拉着动物2的左手,动物2的右手拉着动物3的左手,依次类推,最后动物10的右手拉着动物1的左手。如果通过动物2和8变换队形,则动物2的右手拉着动物8的左手,而对应的动物3的左手拉着动物7的右手,这样形成了1-2-8-9-10和3-4-5-6-7两个圈。如果此时通过动物2和6变换队形,则将形成1-2-6-7-3-4-5-8-9-10一个大圈。注意,如果此时通过动物1和2变换队形,那么队形不会改变,因为动物1的右手和动物2的左手松开后又拉到一起了。

在跳舞的过程中,每个动物i都有一个欢乐值Hi和一个感动值Fi。
如果两个动物在一个圈中,欢乐值会彼此影响,产生欢乐能量。如果两个动物i, j(i≠j)在同一个大小为t的圈中,而动物i在动物j右手的第p个位置(动物j右手的第1个位置就是动物j右手所拉着的动物,而第2个位置就是右手第1个位置的动物右手拉着的动物,依次类推),则产生的欢乐能量为(t-p)*Hj*Fi。在跳舞的过程中,动物们的欢乐值和感动值有可能发生变化。

圆舞曲开始的时候,所有的动物按编号顺序围成一个圈,动物n右手的第i个位置正好是动物i。现在已知小动物们变换队形的过程和欢乐值、感动值变化的过程,求每次变换后所有动物所产生的欢迎能量之和。

【输入格式】
输入的第一行包含一个整数n,表示动物的数量。
接下来n行,每行两个用空格分隔的整数Hi, Fi,按编号顺序给出每只动物的欢乐值和感动值。
接下来一行包含一个整数m,表示队形、欢乐值、感动值的变化次数。
接下来m行,每行三个用空格分隔的整数k, p, q,当k=1时,表示小动物们通过动物p和动物q变换了队形,当k=2时,表示动物p的欢乐值变为q,当k=3时,表示动物p的感动值变为了q。

【输出格式】
输出m行,每行一个整数,表示每次变化后所有动物产生的能量之和。
答案可能很大,你需要计算答案除以1000000007的余数。

【样例输入】
10
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
9
1 2 8
1 2 6
2 8 10
3 5 10
1 1 2
1 2 1
2 5 5
1 4 8
1 4 5

【样例输出】
100
450
855
1341
1341
811
923
338

923

这道题我先编写一个person类,成员变量有name、Hi、Fi。用队列的方式将每个人按顺序加入队列,在定义一个数组来存放队列,

感觉我写的比较复杂,仅供参考(没有编写限制数据规模的程序,这个简单请自行添加)

import java.util.LinkedList;
import java.util.Scanner;
import java.util.Vector;public class 圆圈舞 {public static int n,m,HF[];public static LinkedList<person> list1=new LinkedList<>();public static Vector<LinkedList<person>> v=new Vector<>();public static void main(String[] args) {       Scanner s=new Scanner(System.in);n=s.nextInt();for(int i=0;i<n;i++){person p=new person(i+1);p.setHi(s.nextInt());p.setFi(s.nextInt());list1.add(p);}v.add(list1);m=s.nextInt();HF=new int[m];for(int i=0;i<m;i++){int a=s.nextInt();int b=s.nextInt();int c=s.nextInt();if(a==1){change(b,c);HF[i]=count();}else if(a==2){//换欢乐值changeHi(b,c);HF[i]=count();}else if(a==3){//换感动值changeFi(b,c);HF[i]=count();}}for(int i=0;i<m;i++){System.out.println(HF[i]);}}public static int count(){int sumHF=0;int a=v.size();for(int i=0;i<a;i++){for(int j=0;j<v.get(i).size();j++){int count=0;for(int k=j+1;k<v.get(i).size();k++){sumHF+=(v.get(i).size()-(k-j))*v.get(i).get(k).getHi()*v.get(i).get(k).getFi();count++;}if(count!=v.get(i).size()-1){for(int k=0;k<(v.get(i).size()-1-count);k++){sumHF+=(j-k)*v.get(i).get(k).getHi()*v.get(i).get(k).getFi();}}}}return sumHF%1000000007;}public static void changeHi(int n1,int n2){//欢乐值int a=seek(n1);person p=new person(0);LinkedList<person> lista=v.get(a);for(int i=0;i<lista.size();i++){if(lista.get(i).getname()==n1){p=lista.get(i);break;}}p.setHi(n2);}public static void changeFi(int n1,int n2){//感动值     int a=seek(n1);person p=new person(0);LinkedList<person> lista=v.get(a);for(int i=0;i<lista.size();i++){if(lista.get(i).getname()==n1){p=lista.get(i);break;}}p.setFi(n2);}public static void change(int n1,int n2){//交换位置person p1=new person(0);person p2=new person(0);int c=seek(n1);int d=seek(n2);LinkedList<person> lista=v.get(c);LinkedList<person> listb=v.get(d);if(c==d){//在同一队列LinkedList<person> pk=new LinkedList<>();for(int i=0;i<lista.size();i++){if(lista.get(i).getname()==n1)p1=lista.get(i);if(lista.get(i).getname()==n2)p2=lista.get(i);}if(lista.indexOf(p1)<lista.indexOf(p2)){for(int i=lista.indexOf(p1)+1;lista.indexOf(p2)!=lista.indexOf(p1)+1;){pk.add(lista.get(i));lista.remove(i);}}else{int h=lista.indexOf(p1);int k=lista.indexOf(p2);person l=lista.get(h+1);for(int i=k;lista.indexOf(l)!=k;){pk.add(lista.get(i));lista.remove(i);}}v.add(pk);}else{//不在同一队列for(int i=0;i<lista.size();i++){if(lista.get(i).getname()==n1){p1=lista.get(i);break;}}for(int i=0;i<listb.size();i++){if(listb.get(i).getname()==n2){p2=listb.get(i);break;}}while(lista.indexOf(p1)!=lista.size()-1){lista.add(lista.getFirst());lista.removeFirst();}for(int i=listb.indexOf(p2);i<listb.size();i++){lista.add(listb.get(i));}for(int i=0;i<listb.indexOf(p2);i++){lista.add(listb.get(i));}v.remove(listb);}}public static int seek(int n1){//寻找该人在哪个队列int a=0;for(int i=0;i<v.size();i++){for(int j=0;j<v.get(i).size();j++){if(v.get(i).get(j).getname()==n1){a=i;}}if(a!=0)break;}return a;        }
}
class person{//定义一个类 存放每个人的信息private int Hi,Fi,HF;private int name;person(int name){this.name=name;}public int getname(){return name;}public void setHi(int i){this.Hi=i;}public int getHi(){return Hi;}public void setFi(int i){this.Fi=i;}public int getFi(){return Fi;}public void setHF(int i){this.HF=i;}public int getHF(){return HF;}
}

蓝桥杯--第七届决赛:圆圈舞相关推荐

  1. 蓝桥杯第七届决赛真题大全题解(java版本)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 >蓝桥杯第七届决赛第一题[(详情(愤怒小鸟))](http://blog.csdn.ne ...

  2. 蓝桥杯第七届决赛JAVA真题----广场舞

    广场舞 LQ市的市民广场是一个多边形,广场上铺满了大理石的地板砖. 地板砖铺得方方正正,就像坐标轴纸一样. 以某四块砖相接的点为原点,地板砖的两条边为两个正方向,一块砖的边长为横纵坐标的单位长度,则所 ...

  3. 蓝桥杯第七届决赛之---阶乘位数

    阶乘位数 9的阶乘等于:362880 它的二进制表示为:1011000100110000000 这个数字共有19位. 请你计算,9999 的阶乘的二进制表示一共有多少位? 思路总结: 根据平时做题规律 ...

  4. 蓝桥杯第七届决赛JAVA真题----路径之谜

    路径之谜 小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角. ...

  5. 蓝桥杯第六届决赛真题大全解(java版本)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 >蓝桥杯第六届决赛第一题[(详情(分机号))](http://blog.csdn.net ...

  6. 重庆邮电大学计算机学院蓝桥杯,第七届蓝桥杯大赛个人赛(软件类)-重庆赛区获奖名单...

    第七届蓝桥杯全国软件和信息技术专业人才大赛-个人赛省赛(软件类)重庆赛区获奖名单 省份重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重庆重 ...

  7. 蓝桥杯嵌入式 - 第九届决赛试题(电子秤)

    第九届决赛试题(电子秤),在群文件里找到,应该是第九届的决赛题目. 先放上去代码及题目,后面博客慢慢写哈! 因为时间很久了,记不清楚具体资料是哪个了,把失效链接删除,下面这个是更新的全部蓝桥杯的资料. ...

  8. 蓝桥杯第七届省赛java组大题解析(“取球博弈”??难度,“压缩变换”三星难度)

    第六题 题目: 方格填数 如下的10个格子    +--+--+--+    | 0| 1| 2| +--+--+--+--+ | 3| 4| 5| 6| +--+--+--+--+ | 7| 8| ...

  9. 蓝桥杯第七届省赛JAVA真题----剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...

  10. 蓝桥杯第七届省赛JAVA真题----压缩变换

    压缩变换 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...

最新文章

  1. 前端之css基础学习(更正版)
  2. 海康威视人证对比设备SDK-C#
  3. 【VC基础】 5、对象相关性(Object Dependencies)
  4. SAP簇表(cluster table)BSEG使用方法
  5. LNMP一键安装shell脚本
  6. element ui 图片控件 排序_vuedraggable+element ui实现页面控件拖拽排序效果
  7. [转帖]jQuery框架学习第八天:ASP.NET jQuery实施方案
  8. [HAOI2016]找相同字符
  9. 美国7月ISM制造业PMI录得52.8创两年多新低 新订单连续第二个月萎缩
  10. Linux系统备份与还原-Clonezilla
  11. 获取MP4视频关键帧图像,并保存为JPEG格式文件
  12. 查看windows显卡内存详细信息
  13. angular2完整视频教程收藏(大漠穷秋)
  14. html+js的lrc歌词同步播放器
  15. python 百度地图api_使用Python玩转百度地图Api
  16. PS学习-制作下雨效果
  17. (Tiled官方文档翻译)第二节:四种图层的介绍
  18. 2022人才市场洞察及薪酬指南
  19. css/html 定位 绝对定位/相对定位
  20. 2021教师副高考试成绩查询,2021年教师资格证考试成绩查询入口

热门文章

  1. 中国NPP净初级生产力数据/植被覆盖空间分布数据分享(2000-2021)
  2. 计算机测配色原理,计算机测配色教学方法论文
  3. MySQL必知必会——语句总结
  4. 二维码在线生成接口API
  5. uniapp,从文件流获取图片地址,并展示图片
  6. csgo红锁号能解锁吗_CSGO红锁黑刀号!重磅!大规模红锁!
  7. 支付宝AR抢红包?前端轻松就破解~
  8. Groovy框架Spock随0.6大发布
  9. 职业高中计算机英语必背单词,高中英语3500个必背单词.pdf
  10. [NTUSTISC pwn LAB 2]栈溢出:gdb动态调试bof2