**第六届蓝桥杯A组省赛**

饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。

输入:一个整数n,表示开始购买的饮料数量(0 < n < 10000)
输出:一个整数,表示实际得到的饮料数

例如:
用户输入:
100
程序应该输出:
149

用户输入:
101
程序应该输出:
151

#include <bits/stdc++.h>
using namespace std;int main()
{ifstream infile("in.txt");int s,n;infile>>n;s=n;while (n>=3) {s+=n/3;n=n/3+n%3;}cout<<s<<endl;return 0;
}

垒骰子
赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。
经过长期观察,atm发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!
我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。
假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。
atm想计算一下有多少种不同的可能的垒骰子方式。
两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。
由于方案数可能过多,请输出模 10^9 + 7 的结果。
不要小看了 atm 的骰子数量哦~

「输入格式」
第一行两个整数 n m
n表示骰子数目
接下来 m 行,每行两个整数 a b ,表示 a 和 b 数字不能紧贴在一起。

「输出格式」
一行一个数,表示答案模 10^9 + 7 的结果。

「样例输入」
2 1
1 2

「样例输出」
544

「数据范围」
对于 30% 的数据:n <= 5
对于 60% 的数据:n <= 100
对于 100% 的数据:0 < n <= 10^9, m <= 36

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MO=1e9+7;
const int opps[]={0,4,5,6,1,2,3};
struct Mat {int r,c;ll el[7][7];Mat() {}Mat(ll x) {r=c=6;memset(el,0,sizeof(el));for (int i=1;i<=r;i++)  el[i][i]=x;}Mat(int _r,int _c,ll x){r=_r;c=_c;for (int i=1;i<=r;i++) for (int j=1;j<=c;j++)  el[i][j]=x;}Mat operator *(const Mat &b) {Mat res(r,b.c,0);for (int i=1;i<=r;i++) for (int j=1;j<=b.c;j++) for (int k=1;k<=c;k++) res.el[i][j]+=el[i][k]*b.el[k][j];return res;}Mat operator %(const int Mo) {for (int i=1;i<=r;i++) for (int j=1;j<=c;j++) el[i][j]=el[i][j]%Mo;return (*this);}
};
template <class DataType>
DataType fpow(DataType x,int n){DataType res(1);while (n) {if (n&1)  res=x*res%MO;x=x*x%MO;n>>=1;}return res;
}
int main()
{ifstream infile("in.txt");int n,m;infile>>n>>m;Mat coop(6,6,1);for (int i=1;i<=m;i++) {int x,y;infile>>x>>y;coop.el[x][opps[y]]=0;coop.el[y][opps[x]]=0;}coop=fpow(coop,n-1);ll ans=0,fo=4;  for (int i=1;i<=6;i++)for(int k=1;k<=6;k++) ans=(ans+coop.el[i][k])%MO;ans=ans*fpow(fo,n)%MO;cout<<ans;return 0;
}

灾后重建
Pear市一共有N(<=50000)个居民点,居民点之间有M(<=200000)条双向道路相连。这些居民点两两之间都可以通过双向道路到达。这种情况一直持续到最近,一次严重的地震毁坏了全部M条道路。
震后,Pear打算修复其中一些道路,修理第i条道路需要Pi的时间。不过,Pear并不打算让全部的点连通,而是选择一些标号特殊的点让他们连通。
Pear有Q(<=50000)次询问,每次询问,他会选择所有编号在[l,r]之间,并且 编号 mod K = C 的点,修理一些路使得它们连通。由于所有道路的修理可以同时开工,所以完成修理的时间取决于花费时间最长的一条路,即涉及到的道路中Pi的最大值。

你能帮助Pear计算出每次询问时需要花费的最少时间么?这里询问是独立的,也就是上一个询问里的修理计划并没有付诸行动。

【输入格式】
第一行三个正整数N、M、Q,含义如题面所述。
接下来M行,每行三个正整数Xi、Yi、Pi,表示一条连接Xi和Yi的双向道路,修复需要Pi的时间。可能有自环,可能有重边。1<=Pi<=1000000。
接下来Q行,每行四个正整数Li、Ri、Ki、Ci,表示这次询问的点是[Li,Ri]区间中所有编号Mod Ki=Ci的点。保证参与询问的点至少有两个。

【输出格式】
输出Q行,每行一个正整数表示对应询问的答案。

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

【样例输出】
9
6
8
8

【数据范围】
对于20%的数据,N,M,Q<=30
对于40%的数据,N,M,Q<=2000
对于100%的数据,N<=50000,M<=2*10^5,Q<=50000. Pi<=10^6.
Li,Ri,Ki均在[1,N]范围内,Ci在[0,对应询问的Ki)范围内。

#include <bits/stdc++.h>
#define M 200001
#define N 50001
using namespace std;
struct Node{int b1,e1,value;
};
struct Pan{int max,a,b;Pan *pa,*pb;
};
set<int> my[2*M];
Pan *pp[N],*head;
priority_queue<Node> t;
int mark[N],sig[N];
int n,m,q,sum=0;
bool operator<(Node a,Node b){return a.value>b.value;
}
ostream& operator<<(ostream &out,Node &a){out<<a.b1<<" "<<a.e1<<" "<<a.value<<endl;return out;
}
int find(int x,int m[]){if(x==m[x]) return x;else return find(m[x],m);
}
void unio(int x,int y,int m[]){int a,b;a=find(x,m);b=find(y,m);if(a!=b) m[a]=b;
}
bool check(Node te){int a=find(te.b1,sig);int b=find(te.e1,sig);if(a==b) return false;unio(a,b,sig);return true;
}
void he(int x){if(pp[x]!=NULL) {int at=pp[x]->a;set<int>::iterator it;for(it=my[at].begin();it!=my[at].end();it++)my[sum].insert(*it);at=pp[x]->b;for(it=my[at].begin();it!=my[at].end();it++)my[sum].insert(*it);}
}
void ptree(Node te){int a=find(te.b1,mark);int b=find(te.e1,mark);Pan *p=(Pan *)malloc(sizeof(Pan));p->max=te.value;my[sum].insert(te.b1);he(a);p->a=sum;p->pa=pp[a];my[++sum].insert(te.e1);he(b);p->b=sum++;p->pb=pp[b];unio(a,b,mark);pp[b]=p;head=p;//cout<<p->a<<"  "<<p->b<<"********\n";
}
void print(Pan *p){if(p==NULL) return;cout<<p->max<<endl;set<int>::iterator it;cout<<"left: ";for(it=my[p->a].begin();it!=my[p->a].end();it++)cout<<(*it)<<" ";cout<<"\nright: ";for(it=my[p->b].begin();it!=my[p->b].end();it++)cout<<(*it)<<" ";   cout<<endl;print(p->pa);print(p->pb);
}
int refer(set<int> gg,Pan *p){set<int>::iterator it;int t1=0,t2=0;for(it=gg.begin();it!=gg.end();it++){if(my[p->a].find(*it)!=my[p->a].end()) t2++;t1++;if(t1!=t2&&t2!=0) break;}if(t1==t2) return refer(gg,p->pa);if(t2==0)  return refer(gg,p->pb);return p->max;
}
int main(int argc, char *argv[]) {ifstream infile("in.txt");int tot=0,a,b,c,d;struct Node bri;infile>>n>>m>>q;for(int i=1;i<=n;i++) {sig[i]=i;mark[i]=i;}for(int i=0;i<m;i++){ infile>>bri.b1>>bri.e1>>bri.value;t.push(bri);}while(!t.empty()){bri=t.top();t.pop();bool bb=check(bri);if(bb==false) continue;tot++;ptree(bri);if(tot==m-1) break;}//cout<<"tree ok\n";//print(head);for(int i=0;i<q;i++){infile>>a>>b>>c>>d;int k;for(k=a;k<=b;k++)if(k%c==d) break;set<int> cc;for(int g=k;g<=b;g+=c)cc.insert(g);cout<<refer(cc,head)<<endl;}return 0;
}

坑了宝宝这么久,终于有结果了.
hushanjushi181@sina.com

那些年错过的蓝桥杯(三)相关推荐

  1. 三羊献瑞c语言编程入门,蓝桥杯-三羊献瑞,

    蓝桥杯-三羊献瑞, 更多精彩文章请关注公众号『大海的BLOG』 问题 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞 ---------------- 三 羊 生 瑞 气 其中,相同的汉字代 ...

  2. 蓝桥杯 - 三羊献瑞 (java实现)

    观察下面的加法算式: 祥 瑞 生 辉   +   三 羊 献 瑞 -------------------------   三  羊 生 瑞 气 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字 ...

  3. 蓝桥杯三羊生瑞气,暴力破解

    最近这段时间在刷蓝桥杯往年的题遇到遇到一道题,希望大神看见了能给个简单的解法. 这个题呢是15年的蓝桥杯的题,因为是填空,所以呢我就给暴力破解了,(好吧,我承认其实想了好长时间最后没办法只能给暴力破解 ...

  4. 蓝桥杯—三羊献瑞,祥瑞生辉+三羊献瑞

    蓝桥杯比赛题目: 三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉   +   三 羊 献 瑞 -------------------    三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg ...

  5. C/C++蓝桥杯三升序列

    本题答案可能是错的,我算出的是180414,和很多博主的答案不一样,我也不太懂哪里有问题,大家可以探讨一下 题目描述 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行 ...

  6. [蓝桥杯]三升序列(Python实现)

    题目: 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 YQ ...

  7. [蓝桥杯] 三升序列 python解法

    [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...

  8. 蓝桥杯三羊献瑞java_java实现第六届蓝桥杯三羊献瑞

    三羊献瑞 题目描述 观察下面的加法算式: 祥 瑞 生 辉 三 羊 献 瑞 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. ...

  9. 2015蓝桥杯 三羊献瑞(回溯法dfs)

    观察下面的加法算式: 祥 瑞 生 辉 +     三 羊 献 瑞  = 三 羊 生 瑞 气 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的 ...

最新文章

  1. 云极知客开放平台接口调用方法(C#)
  2. 微型计算机三包法第30条内容,我不同意国家对电视机三包有明确规定,还是检测手段有问题。保修内容明确维护好消费者的权益。- 法律快车法律咨询...
  3. 解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题
  4. Java课程03总结
  5. Ubuntu系统Apache2部署SSL证书
  6. 习惯的力量之三冰山一角
  7. MyEclipse部署Web项目Servers报错:NullPointerException at com.genuitec.eclipse.ast.deploy.core.Deployment
  8. graphpad prism怎么添加图例_Graphpad官网刚刚升级了!听说,新功能吊打R语言...........
  9. python软件开发目录_软件开发目录规范
  10. java xml解析_XML的理解以及SAX解析流程
  11. java crontriggerbean_java – 使用JobStoreTX为石英聚类配置CronTriggerFactoryBean
  12. 关于/etc/init.d/nfs脚本解读中的疑问解答
  13. react进行状态管理的几种方式
  14. vector的初始化和使用
  15. mui html5 vue,MUI和VUE数据绑定 mui框架入门 (一)
  16. App在appStore上搜索不到的解决方案
  17. 小手的图标css,CSS中cursor属性给标签加上小手形状
  18. 我希望进入大学时就能知道的一些事儿 -----作者:瞬息之间
  19. 人民日报谈美国减税:是在挑起税务战,国际税收秩序将陷混乱(zz)
  20. unity3d 地面印花_Unity3D 中的贴花效果 – 苍白的茧

热门文章

  1. html制作一个酷炫的记事本(源码)
  2. 签电子合同怎么少得了“诚信签”
  3. 服务器推送消息方法总结及实现(java)
  4. Word如何将波浪号(~)如何打到中间
  5. 7 Papers Radios | YOLO v4它来了;北航MangaGAN生成久保带人Style漫画形象
  6. 进程,时间片,并发与并行
  7. 从第四维看中国···
  8. 智慧城市兴起,让我们看看智慧城市里面的3D可视化效果
  9. jQuery修改class属性
  10. matlab 快速行进法 compile_mex报错