题面被改成了个猪。。。


T1猪猪划船(boat)

【题目描述】

6只可爱的猪猪们一起旅游,其中有3只大猪A,B,C,他们的孩子为3只小猪a,b,c。由于猪猪们十分凶残,如果小猪在没有父母监护的情况下,和其他的大猪待在一起,就会被吃掉。

拦在他们面前的是一条大河,河上有一只只有1个船桨且限载2只猪的小船,只有A,B,C,a会划船。他们独自划船单程需要的时间为tA,tB,tC,ta,如果搭载另一只猪时间翻倍。你需要求出所有猪猪过河的最短时间。

【输入数据】

一行,4个整数,tA,tB,tC,ta。

【输出数据】

一行,一个整数,表示最短时间。

【样例输入】

10 10 10 10

【样例输出】

220

【数据范围】

对于20%的数据:tA=tB=tC=ta

对于60%的数据:ta<=tA<=tB<=tC

对于100%的数据:tA,tB,tC,ta<=100

【题解大意】

写的时候没推懂样例。然后因为样例给的是tA=tB=tC=ta,所以交了一个无脑的20分,直接输出22*t。

一直到讲之前也还是没弄懂样例。。。

【code】

//boat.20
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline void file(){
freopen("boat.in","r",stdin);
freopen("boat.out","w",stdout);
}
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
const int mxn = ;
int val[];
inline int A(int x){return x&(<<)>;}
inline int B(int x){return x&(<<)>;}
inline int C(int x){return x&(<<)>;}
inline int a(int x){return x&(<<)>;}
inline int b(int x){return x&(<<)>;}
inline int c(int x){return x&(<<)>;}
inline bool check(int x){
if(A(x)!=a(x))
if(a(x)==B(x)||a(x)==C(x)) return ;
if(B(x)!=b(x))
if(b(x)==A(x)||a(x)==C(x)) return ;
if(C(x)!=c(x))
if(c(x)==A(x)||c(x)==B(x)) return ;
return ;
}
bool v[mxn];
int d[mxn];
queue<int>q;
inline void wor(int x,int y,int z){
if(!check(y)) return;
if(d[y] > d[x]+z){
d[y] = d[x]+z;
if(!v[y]) q.push(y),v[y] = ;
}
}
inline void spfa(){
memset(d,0x3f,sizeof(d));
memset(v,,sizeof(v));
v[] = ,d[] = ;
q.push();
while(q.size()){
int x = q.front(); q.pop();
if(x&){
rep(i,,) if(x&(<<i))
rep(j,,) if(x&(<<j))
if(i==j) wor(x,x^(<<i)^,val[i]<<);
else wor(x,x^(<<i)^(<<j)^,val[i]<<);
}else{
rep(i,,) if(!(x&(<<i)))
rep(j,,) if(!(x&(<<j)))
if(i==j) wor(x,x^(<<i)^,val[i]<<);
else wor(x,x^(<<i)^(<<j)^,val[i]<<);
}
}
}
int main(){
// file();
rep(i,,) val[i] = read();
spfa();
printf("%d\n",d[(<<)-]);
return ;
}

T2小猪星球(planet)

【题目描述】

小猪所在的星系有n个星球,用1~n标号,其中有一些星球之间有单向的隧道相连。由于超时空隧道的存在,通过一个隧道的时间可能为0或负数。现在小猪们决定从1号星球出发,沿着最短路径到达n号星球。

科学家猪小聪发明了一种神奇的装置,使得飞船在每个隧道中运行的时间都增加一个相同的常数(可以为0或负数),你需要确定这个常数使得旅途的总时间非负且最小。

【输入数据】

输入文件包含多组数据,第一行为数据组数T。

对于每一组数据,第一行两个整数V,E,表示星球的个数和隧道的个数。接下来E行,每行3个整数i,j,t,表示从i号星球到j号星球有一条耗时为t的单向隧道。

【输出数据】

共T行,每行一个整数,表示从1号星球到n号星球最短的时间。如果不能从1号星球到达n号星球,输出-1。

【样例输入】

1

4 5

1 2 1

1 3 1

2 3 -3

3 1 1

3 4 1

【样例输出】

2

【样例解释】

如果不使用科技(也可以理解成是使用科技,但确定常数为0,所有的隧道时间不变),则1->2->3->1->2->3……->4的时间为负无穷,不符合要求。若使用科技,确定常数为1,则1->2->3->4的最短时间为2。

【数据范围】

对于100%的数据,N<=100,E<=N(N+1)/2,|t|<=10^5,i,j<=N

友情提示:可能有重边和自环

【题解大意】

写了两个小时还是爆零的题,真是令人开心。

【code】

//planet
#include<bits/stdc++.h>
using namespace std;
#define inf 1<<30
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline void file(){
freopen("planet.in","r",stdin);
freopen("planet.out","w",stdout);
}
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
const int mxn = ;
const int lim = 1e5;
int T,V,E;
bool v[mxn],vis[mxn]; struct edge{int nxt,y,v;}e[lim];
struct eg{int nxt,y;}e1[lim]; int to[mxn],len;
inline void add(int xx,int yy,int zz){
e[++len].nxt = to[xx];
to[xx] = len;
e[len].y = yy;
e[len].v = zz;
}
int to1[mxn],len1;
inline void add1(int x,int y){
e1[++len1].nxt = to1[x];
to1[x] = len1;
e1[len1].y = y;
} int d[mxn];
queue<int> q;
int cnt[mxn];
bool a[mxn][mxn]; inline void dfs(int x){
vis[x] = ;
for(int i = to1[x]; i;i = e1[i].nxt){
int y = e1[i].y;
if(!vis[y]) dfs(y);
}
} inline void Floyd(){
memset(vis,,sizeof(vis));
rep(k,,V)rep(i,,V)rep(j,,V)
a[i][j] |= a[i][k]&a[k][j];
//连通为 1,不连通为 0
rep(i,,V-) if(!a[i][V]) vis[i] = ;
} inline bool spfa(int dt){
memset(cnt,,sizeof(cnt));
memset(d,0x3f,sizeof(d));
memset(v,,sizeof(v));
v[] = ,d[] = ,cnt[] = ;
q.push();
while(q.size()){
int x = q.front(); q.pop();
v[x] = ;
for(int i = to[x]; i;i = e[i].nxt){
int y = e[i].y,z = e[i].v+dt;
if(vis[y]) continue;
if(d[y] > d[x]+z){
d[y] = d[x]+z;
cnt[y] = cnt[x]+;
if(cnt[y] > V) return ;
if(!v[y]) q.push(y),v[y] = ;
}
}
}
return d[V]>=;
}
int l,r,m;
inline int wor(){
if(vis[]) return -;
l = -lim,r = lim;
while(l+<r){
m = l+r >>;
spfa(m)?r = m:l = m+;
}
if(spfa(l)) return d[V];
spfa(r); return d[V];
}
inline void clear(){
len = ,len1 = ;
memset(to,,sizeof to);
memset(to1,,sizeof to1);
memset(vis,,sizeof vis);
}
int main(){
// file();
T = read();
while(T--){
V = read(),E = read();
memset(a,,sizeof(a));
clear();
while(E--) {
int i = read(),j = read(),t = read();
a[i][j] = ;
add(i,j,t);
// add1(j,i);
}
// dfs(V);
Floyd();
printf("%d\n",wor());
}
return ;
}

T3小猪送货(deliver)

【题目描述】

小猪所在的星系有n个星球从左到右排成一排,用1~n标号。每个星球有建设有一个工厂,住着若干居民。猪粮是猪猪星系的重要的物资,第i个城市的工厂能够生产pi个单位的猪粮,第i个城市最多可以卖出si个单位猪粮。对于任意1<=i<j<=n,存在着一条从i到j的单向道路,最多可以通过这条道路运输c个单位的猪粮,你需要计算最多能够卖出多少猪粮。

【输入数据】

第一行两个整数n,c

第二行n个整数,第i个整数表示pi

第三行n个整数,第i个整数表示si

【输出数据】

一行,一个整数,表示最多可以卖出的猪粮的单位数

【样例输入1】

5 1

7 4 2 1 0

1 2 3 4 5

【样例输出1】

12

【样例输入2】

4 3

13 10 7 4

4 7 10 13

【样例输出2】

34

【数据范围】

对于20%的数据:c=0

对于60%的数据:n<=100

对于100%的数据:n<=10000,0<=c,pi,si<=10^9

【题解大意】

拿了c=0的部分分,每次加上min(p[i],s[i])就行,正确性显然。

本题来源:codeforces 724E

【code】

#include<bits/stdc++.h>
using namespace std;
#define inf 1<<30
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline void file(){
freopen("deliver.in","r",stdin);
freopen("deliver.out","w",stdout);
}
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
const int mxn = 1e4+;
int p[mxn],s[mxn];
int n,c;
int f[mxn][mxn];
int main(){
file();
n = read(),c = read();
rep(i,,n) p[i] = read();
rep(i,,n) s[i] = read();
rep(i,,n) f[][i] = f[][i] = inf;
f[][]=p[],f[][]=s[];
rep(i,,n){
f[i&][] = f[i&^][]+p[i];
rep(j,,n){
f[i&][j] = min(f[i&^][j]+j*c+p[i],f[i&^][j-]+s[i]);
}
}
int minx = inf;
rep(i,,n) minx = min(minx,f[n&][i]);
printf("%d\n",minx);
return ;
}

T4小猪数数(math)

【题目描述】

猪小聪和猪小明在一个小时的时间里,A完了前三题,他们无聊地说:“咱们来玩个游戏消磨时间吧……”

在这个游戏中,猪小聪和猪小明每个人手上有一台电脑,一开始双方的电脑上的数字都是1。现在猪小聪和猪小明按照任意的顺序执行操作a=a+b(其中a为自己电脑上的数字,b为对方电脑上的数字),例如按照小聪-小明-小明执行后双方的数字为2 5。

现在在他们玩了若干轮之后,双方电脑上的数字为N M,可惜的是他们忘记了他们到底玩了多少轮,你需要求出他们至少玩了多少轮。

【输入数据】

2个整数,表示N,M。

【输出数据】

1个整数,表示最少玩过的轮数。如果根本不可能出现符合要求的结果,输出-1。

【样例输入1】

2 5

【样例输出1】

3

【样例输入2】

2 2

【样例输出2】

-1

【数据范围】

对于30%的数据,1<=N,M<=10

对于60%的数据,1<=N,M<=1000

对于100%的数据:N,M和ans均不会爆long long (ans表示输出的答案)

【题解大意】

考虑怎么把给定的两个数给弄回去,辗转相减之类的就好了,然后看最后能不能减到n=1,m=1

最后一题这么来好假。。。

【code】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline void file(){
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
}
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
ll n,m,tot = ;
inline void work(){
bool f = ;
while(m>&&n>){
if(m==&&n==) break;
m -= n;
if(m==||n==) {
f = ;
break;
}
++tot;
if(m<n) swap(m,n);
}
if(f) printf("%lld\n",tot);
else puts("-1");
}
int main(){
// file();
scanf("%lld %lld",&n,&m);
if(n>m) swap(n,m);
if(n==m&&n!=) {
puts("-1");
return ;
}
if(n==m&&n==){
puts("");
return ;
}
work();
return ;
}

【FJOI 20170305】省选模拟赛的更多相关文章

  1. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  2. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

  3. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  4. 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2)

    一 稍微转化一下,就是找所有和原树差距不超过k的不同构树的个数 一个挺trick的想法是: 由于矩阵树定理的行列式的值是把邻接矩阵数值看做边权的图的所有生成树的边权乘积之和 那么如果把不存在于原树中的 ...

  5. NOI2019省选模拟赛 第五场

    爆炸了QAQ 传送门 \(A\) \(Mas\)的童年 这题我怎么感觉好像做过--我记得那个时候还因为没有取\(min\)结果\(100\to 0\)-- 因为是个异或我们肯定得按位考虑贡献了 把\( ...

  6. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  7. 省选模拟赛 arg

    1 arg (arg.cpp/in/out, 1s, 512MB)1.1 Description给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. ...

  8. 5.10 省选模拟赛 拍卖 博弈 dp

    LINK:拍卖 比赛的时候 前面时间浪费的有点多 写这道题的时候 没剩多少时间了. 随便设了一个状态 就开始做了. 果然需要认真的思考.其实 从我的状态的状态转移中可以看出所有的结论. 这里 就不再赘 ...

  9. 5.5 省选模拟赛 B Permutation 构造 贪心

    LINK:Permutation 对于这种构造神题 我自然是要补的.为啥就我没想出来哇. 30分还是很好写的 注意8!实际上很小 不需要爆搜 写bfs记录状态即可.至于判断状态是否出现与否 可以开ma ...

随机推荐

  1. Linux下进程和端口常用操作

    https://blog.csdn.net/s573626822/article/details/80680456

  2. springcloud第七步:fegin客户端调用工具

    什么是Feign Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解 ...

  3. 异常处理之IIS配置加载出错

    问题详情:  一台部署在海外服务器,在管理IIS过程中,出现问题 There was an error when trying to connect. Do you want > to rety ...

  4. 二维码图片以字符串的形式保存DB,已文件流显示页面上

    以下是生成二维码的方法,我只用其中一个方法 这个需要引用ZXing.DLL 链接:https://pan.baidu.com/s/1mCTwHiAm_awtsPcibAotZw 提取码:ufp6 pu ...

  5. Zepto源码分析之一(代码结构及初始化)

    关于读源码,读jQuery自然是不错,但太过于庞大不易解读,对于小白,最好从Zepto,Lodash这样的小库入手. 这里使用的是zepto1.1.6版本为例. 自执行函数 在阅读之前,先弄清楚闭包和 ...

  6. java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z

    做spring和mybaits整合时出现的错误,让这个问题困扰了一早上,通过查资料终于把这个问题解决了 具体问题描述: java.lang.IllegalAccessError: org.apache ...

  7. python 练习1(流控制)

    #!/usr/bin/python #_*_ coding:utf-8 _*_ #练习题 #1.使用while循环输入 1 2 3 4 5 6 8 9 10 #a.定义一个变量存放数字 #b.用whi ...

  8. python之xml模块

    # XML 模块的操作参考链接 # http://www.cnblogs.com/yuanchenqi/articles/5732581.html

  9. # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库

    使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...

  10. Angular4 投影ngContent