9.26 noip模拟试题
魔术球问题弱化版(ball.c/.cpp/.pas)
题目描述
假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球。
(1)每次只能在某根柱子的最上面放球。
(2)在同一根柱子中,任何 2 个相邻球的编号之和为完全平方数。
试设计一个算法,计算出在 n 根柱子上最多能放多少个球。例如,在 4 根柱子上最多可放 11 个球。
对于给定的 n,计算在 n 根柱子上最多能放多少个球。
输入描述
第 1 行有 1 个正整数 n,表示柱子数。
输出描述
一行表示可以放的最大球数
4
样例输出。
样例输入
11
题目限制(为什么说弱化版就在这里)
N<=60,时限为3s;比起原题还有弱化在不用打出方案,方案太坑了
数据小,直接打表..
#include<iostream>
#include<cstdio>
using namespace std;
int a[];
int main()
{
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
int n;
scanf("%d",&n);
printf("%d\n",a[n]);
return ;
}
2.征兵(conscription.c/.cpp/.pas)
一个国王,他拥有一个国家。最近他因为国库里钱太多了,闲着蛋疼要征集一只部队要保卫国家。他选定了N个女兵和M个男兵,但事实上每征集一个兵他就要花10000RMB,即使国库里钱再多也伤不起啊。他发现,某男兵和某女兵之间有某种关系(往正常方面想,一共R种关系),这种关系可以使KING少花一些钱就可以征集到兵,不过国王也知道,在征兵的时候,每一个兵只能使用一种关系来少花钱。这时国王向你求助,问他最少要花多少的钱。
读入(conscription.in)
第一行:T,一共T组数据。
接下来T组数据,
第一行包括N,M,R
接下来的R行 包括Xi,Yi,Vi 表示如果招了第Xi个女兵,再招第Yi个男兵能省Vi元(同样表示如果招了第Yi个男兵,再招第Xi个女兵能也省Vi元)
输出(conscription.out)
共T行,表示每组数据的最终花费是多少(因为国库里的钱只有2^31-1,所以保证最终花费在maxlongint范围内)
样例输入
2
5 5 8
4 3 6831
1 3 4583
0 0 6592
0 1 3063
3 3 4975
1 3 2049
4 2 2104
2 2 781
5 5 10
2 4 9820
3 2 6236
3 1 8864
2 4 8326
2 0 5156
2 0 1463
4 1 2439
0 4 4373
3 4 8889
2 4 3133
样例输出
71071
54223
数据范围
数据保证T<=5 ,m,n<=10000,r<=50000,Xi<=m,Yi<=n,Vi<=10000,结果<=2^31-1
最大生成树
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 50010
using namespace std;
int T,n,m,k,fa[maxn],tot,cost;
struct node{
int u,v,t;
}e[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int cmp(const node &x,const node &y){
return x.t>y.t;
}
void Clear(){
tot=;cost=(n+m)*;
for(int i=;i<=m+n;i++)
fa[i]=i;
}
int find(int x){
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
freopen("conscription.in","r",stdin);
freopen("conscription.out","w",stdout);
T=init();
while(T--){
n=init();m=init();k=init();
Clear();
int u,v,t;
for(int i=;i<=k;i++){
u=init();v=init();t=init();
e[i].u=u;e[i].v=v+n;e[i].t=t;
}
sort(e+,e++k,cmp);
for(int i=;i<=k;i++){
int r1=find(e[i].u);
int r2=find(e[i].v);
if(r1!=r2){
tot++;cost-=e[i].t;fa[r2]=r1;
}
if(tot==n+m-)break;
}
printf("%d\n",cost);
}
return ;
}
3.坑爹的GPS(gpsduel.c/.cpp/.pas)
有一天,FJ买了一辆车,但是,他一手下载了两个GPS系统。好了现在麻烦的事情来了,GPS有一个功能大概大家也知道,如果FJ没有按照GPS内置地图的最短路走,GPS就会报错来骚扰你。现在FJ准备从他的农舍(在1这个点)开车到他的谷屋(n这个点)。FJ给了你两个GPS系统内置地图的信息,他想知道,他最少会听到多少次报错(如果FJ走的路同时不满足两个GPS,报错次数+2)
读入:第一行:n,k;n表示有FJ的谷屋在哪,同时保证GPS内置地图里的点没有超过n的点。K表示GPS内置地图里的路有多少条,如果两个点没有连接则表明这不是一条通路。
接下来k行,每行4个数X,Y,A,B分别表示从X到Y在第一个GPS地图里的距离是A,在第二个GPS地图里的是B。注意由于地形的其他因素GPS给出的边是有向边。
输出:一个值,表示FJ最少听到的报错次数。
样例输入:
5 7
3 4 7 1
1 3 2 20
1 4 17 18
4 5 25 3
1 2 10 1
3 5 4 14
2 4 6 5
样例输出:
1
解释
FJ选择的路线是1 2 4 5,但是GPS 1认为的最短路是1到3,所以报错一次,对于剩下的2 4 5,两个GPS都不会报错。
数据范围
N<=10000,至于路有多少条自己算吧。数据保证所有的距离都在2^31-1以内。
来源
bzoj3538
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 10010
#define ll long long
using namespace std;
ll n,m,num1,num2,num,head1[maxn],head2[maxn],head[maxn],dis1[maxn],dis2[maxn],dis[maxn],f[maxn];
ll u[maxn*],v[maxn*],t1[maxn*],t2[maxn*];
queue<ll>q;
struct node{
ll u,v,t,pre;
}e1[maxn*],e2[maxn*],e[maxn*];
ll init(){
ll x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Add1(ll from,ll to,ll dis){
num1++;e1[num1].u=from;
e1[num1].t=dis;
e1[num1].v=to;
e1[num1].pre=head1[from];
head1[from]=num1;
}
void Add2(ll from,ll to,ll dis){
num2++;e2[num2].u=from;
e2[num2].t=dis;
e2[num2].v=to;
e2[num2].pre=head2[from];
head2[from]=num2;
}
void SPFA1(){
memset(dis1,/,sizeof(dis));
q.push(n);f[n]=;dis1[n]=;
while(!q.empty()){
int k=q.front();
q.pop();f[k]=;
for(int i=head1[k];i;i=e1[i].pre){
int v=e1[i].v;
if(dis1[v]>dis1[k]+e1[i].t){
dis1[v]=dis1[k]+e1[i].t;
if(f[v]==){
f[v]=;q.push(v);
}
}
}
}
}
void SPFA2(){
memset(f,,sizeof(f));
memset(dis2,/,sizeof(dis));
while(!q.empty())q.pop();
q.push(n);f[n]=;dis2[n]=;
while(!q.empty()){
int k=q.front();
q.pop();f[k]=;
for(int i=head2[k];i;i=e2[i].pre){
int v=e2[i].v;
if(dis2[v]>dis2[k]+e2[i].t){
dis2[v]=dis2[k]+e2[i].t;
if(f[v]==){
f[v]=;q.push(v);
}
}
}
}
}
ll Solve(){
memset(f,,sizeof(f));
memset(dis,/,sizeof(dis));
while(!q.empty())q.pop();
q.push();f[]=;dis[]=;
while(!q.empty()){
int k=q.front();
q.pop();f[k]=;
for(int i=head[k];i;i=e[i].pre){
int v=e[i].v;
if(dis[v]>dis[k]+e[i].t){
dis[v]=dis[k]+e[i].t;
if(f[v]==){
f[v]=;q.push(v);
}
}
}
}
return dis[n];
}
int main()
{
freopen("gpsduel.in","r",stdin);
freopen("gpsduel.out","w",stdout);
n=init();m=init();
for(ll i=;i<=m;i++){
u[i]=init();v[i]=init();t1[i]=init();t2[i]=init();
Add1(v[i],u[i],t1[i]);Add2(v[i],u[i],t2[i]);
}
SPFA1();
SPFA2();
for(ll i=;i<=m;i++){
e[i].v=v[i];e[i].pre=head[u[i]];head[u[i]]=i;
if(dis1[v[i]]+t1[i]>dis1[u[i]])e[i].t++;
if(dis2[v[i]]+t2[i]>dis2[u[i]])e[i].t++;
}
cout<<Solve()<<endl;
return ;
}
9.26 noip模拟试题的更多相关文章
- 10.26 noip模拟试题
enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...
- 11.14 noip模拟试题
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...
- 11.9 noip模拟试题
NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...
- 10.6 noip模拟试题
更正:第三组:不存在相同的字符|str|=26,26<=n<=100 60 /* 呵呵哒~这题 正解还在研究.... 因为没有题解只有个std还在看 不过乱搞一下可以70(数据好像有问题只 ...
- 9.23 noip模拟试题
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...
- 9.20 noip模拟试题
Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...
- 2019.7.26 NOIP 模拟赛
这次模拟赛真的,,卡常赛. The solution of T1: std是打表,,考场上sb想自己改进匈牙利然后wei了(好像匈牙利是错的. 大力剪枝搜索.代码不放了. 这是什么神仙D1T1,爆蛋T ...
- 【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计
1. 素数统计 (pcount.pas/.c/.cpp) [问题描述] 小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数.“这不是很简单吗?”小tan忍不住说.揣谙戈冷 ...
- 神奇的Noip模拟试题 T3 科技节 位运算
3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...
随机推荐
- Android应用自杀和干掉其它进程
// 自杀(这种方式只能杀掉自己的进程,其它进程无法杀死) int pid = Process.myPid(); android.os.Process.killProcess(pid); // 或者 ...
- bootcamp
为了鄙社自主研发的html5studio和mist,我给Air划了32G装windows囧 第一要注意的是,必须使用bootcamp划分将要安装windows的分区,不要在windows安装过程中删除 ...
- 【UVALive - 3211】Now or later (二分+2-SAT)
题意: 有n架飞机需要着陆.每架飞机有两种选择,早着陆或者晚着陆,二选其一.现在为了保证飞机的着陆安全,要求两架着陆的飞机的时间间隔的最小值达到最大. 分析: 最小值最大问题我们想到二分答案.对于猜测 ...
- oracle中有关用户、角色的一些概念。
oracle中的每个用户对应一个单独的方案(schema),方案的名字与用户名一样,方案中包含很多数据对象,表,视图,触发器,存储过程等元素. oracle中管理数据库的角色有sys,system,数 ...
- Delphi与Java中的日期互换
在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了.通过查阅资料,发现两 ...
- 14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁
14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁 这个部分建立在概念信息关于deadlocks 在章节 14.5.5.2, "D ...
- [LeetCode#274]H-Index
Problem: Given an array of citations (each citation is a non-negative integer) of a researcher, writ ...
- 支付宝APP支付(Java后台生成签名具体步骤)
/** *支付宝支付 * @param orderId 订单编号 * @param actualPay 实际支付金额 * @return */ private String getOrderInfoB ...
- 怎么打开Windows Server 2008 图片预览的功能?
打开一个文件夹,点击菜单中的“工具”->“文件夹选项”,切换到“查看”选项卡,在高级设置中取消如下选项: “始终显示图标,从不显示缩略图” “在缩略图上显示文件图标”
- Delphi ADOQuery的速度优化 转
今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性. 把控件DBGridEh的一列的checkbox设为true,将其绑定DataSourceA和DOQu ...