Codeforces_807
A. 严格按照题目给的两个条件来。
- #include<bits/stdc++.h>
- using namespace std;
- int n,a[],b[];
- int main()
- {
- ios::sync_with_stdio(false);
- cin >> n;
- for(int i = ;i <= n;i++) cin >> a[i] >> b[i];
- int flag1 = ,flag2 = ;
- for(int i = ;i <= n;i++)
- {
- if(a[i] != b[i]) flag1 = ;
- }
- for(int i = ;i < n;i++)
- {
- if(a[i] < a[i+]) flag2 = ;
- }
- if(flag1) cout << "rated" <<endl;
- else if(flag2) cout << "unrated" << endl;
- else cout << "maybe" << endl;
- return ;
- }
B.可能的值为xx = x+50k(xx >= y),从小到大枚举每一个可能的值,计算cnt就可以了。
- #include<bits/stdc++.h>
- using namespace std;
- int x,y,p,a[];
- int main()
- {
- ios::sync_with_stdio(false);
- cin >> p >> x >> y;
- int xx = x;
- while(x >= y)
- {
- int t = x/%;
- for(int i = ;i <= ;i++)
- {
- t = (t*+)%;
- a[i] = t+;
- if(a[i] == p)
- {
- cout << << endl;
- return ;
- }
- }
- x -= ;
- }
- x = xx;
- int cnt = ,now = ;
- while()
- {
- int t = x/%;
- for(int i = ;i <= ;i++)
- {
- t = (t*+)%;
- a[i] = t+;
- if(a[i] == p)
- {
- cout << cnt << endl;
- return ;
- }
- }
- x += ;
- now++;
- if(now == )
- {
- now = ;
- cnt++;
- }
- }
- return ;
- }
C.先判断0和-1的情况,然后按大小分类。
若x/y < p/q,我们要把x/y变得尽量大,并且最后的值是p/q,可以变成(np-(y-x))/nq,计算n向上取整,然后结果为nq-y。
若x/y > p/q,我们要把x/y变得尽量小,即只加分母,不加分子,最后变成x/nq == np/nq,计算n向上取整,结果同上。
- #include<bits/stdc++.h>
- using namespace std;
- long long x,y,xx,yy;
- int main()
- {
- ios::sync_with_stdio(false);
- int T;
- cin >> T;
- while(T--)
- {
- cin >> x >> y >> xx >> yy;
- if(x*yy == y*xx)
- {
- cout << << endl;
- continue;
- }
- if(x != && xx == || xx >= yy)
- {
- cout << - << endl;
- continue;
- }
- if(x*yy < xx*y)
- {
- long long t = y-x;
- long long ans = t/(yy-xx);
- if(ans*yy-t < ans*xx) ans++;
- cout << ans*yy-y << endl;
- }
- else
- {
- long long ans = x/xx;
- if(ans*xx < x) ans++;
- cout << ans*yy-y << endl;
- }
- }
- return ;
- }
还可以二分n值来写。
D.暴力枚举到100000就可以了。
- #include<bits/stdc++.h>
- using namespace std;
- int n,a[][],b[] = {},c[];
- int calc(int x,int y,int z)
- {
- int t = -x;
- if(x == -) return ;
- if(*y > z) return *t;
- if(*y > z) return *t;
- if(*y > z) return *t;
- if(*y > z) return *t;
- if(*y > z) return *t;
- return *t;
- }
- bool ok(int x)
- {
- int sum1 = ,sum2 = ;
- for(int i = ;i <= ;i++) c[i] = b[i];
- for(int i = ;i <= ;i++)
- {
- if(a[][i] != - && a[][i] > a[][i]) c[i] += x;
- }
- for(int i = ;i <= ;i++)
- {
- sum1 += calc(a[][i],c[i],n+x);
- sum2 += calc(a[][i],c[i],n+x);
- }
- return sum1 > sum2;
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin >> n;
- for(int i = ;i <= n;i++)
- {
- for(int j = ;j <= ;j++)
- {
- cin >> a[i][j];
- if(a[i][j] >= ) b[j]++;
- }
- }
- for(int i = ;i <= ;i++)
- {
- if(ok(i))
- {
- cout << i << endl;
- return ;
- }
- }
- cout << - << endl;
- return ;
- }
E.分别对2的倍数,与2倍数间隔间的数计数,结果个数最多为1的个数,对每个个数,我们判断其是否可行。
我们贪心当前2的倍数之后一个的2的倍数,使剩下来的2的倍数的数量和非2倍数数量和尽可能少,因为剩下的个数为最小的划分的数的个数。
- #include<bits/stdc++.h>
- using namespace std;
- int n,now = ,num[] = {},two[] = {},ans[];
- bool ok(int x)
- {
- int t = two[]-x;
- for(int i = ;i <= now;i++)
- {
- if(x >= two[i])
- {
- t -= min(x-two[i],t);
- x = two[i];
- }
- else t += two[i]-x;
- t += num[i];
- }
- if(t <= x) return ;
- return ;
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin >> n;
- long long t = ;
- for(int i = ;i <= n;i++)
- {
- long long x;
- cin >> x;
- if(x == t) two[now]++;
- else if(x < t) num[now-]++;
- else
- {
- while(t < x)
- {
- t *= ;
- now++;
- }
- if(x == t) two[now]++;
- else num[now-]++;
- }
- }
- int cnt = ;
- for(int i = ;i <= two[];i++)
- {
- if(ok(i)) ans[++cnt] = i;
- }
- if(cnt == ) cout << - << endl;
- else
- {
- for(int i = ;i <= cnt;i++) cout << ans[i] << " ";
- cout << endl;
- }
- return ;
- }
F.首先一种特殊情况,我们选择权值最小(w0)的一条边,设其两点为A,B,不难理解,A,B两点的总p值均为(n-1)*w0。
然后,对于其他的点,取点a,每个点连接着(n-1)条边,对于每条边,权值为w1,设它连的点为a,b,那么,我们可以把除a,b外的所有点先连成最小,即所有边最终跑向A或B,即(n-3)*w0,然后连接A到b或者B到b,再b到a,这里最后两条路径的权值分为两种情况:①若前一点->b 大于 b->a,则总p值为(n-3)*w0+2*w1
②若前一点->b 小于 b->a,则总p值为(n-3)*w0+w前一点->b+w1
这样的情况下,我们在(n-1)*2种情况里取的最小p值为最优解。
第一种情况比较好求解,第二种情况我们可以从到b点的最优转换而来,把原来的a去掉,在最后加上b->a,即-minn+w1。
这样我们就对求解顺序有一定的要求,按边权值从小到大排序,每次更新边的两个点,是符合要求的。
- #include<bits/stdc++.h>
- using namespace std;
- int n;
- long long ans[];
- struct xx
- {
- int u,v,w;
- xx(int a,int b,int c):u(a),v(b),w(c){};
- friend bool operator <(xx a,xx b)
- {
- return a.w < b.w;
- }
- };
- vector<xx> v;
- int main()
- {
- ios::sync_with_stdio(false);
- cin >> n;
- for(int i = ;i <= n;i++) ans[i] = 1e18;
- for(int i = ;i <= n;i++)
- {
- for(int j = i+;j <= n;j++)
- {
- int x;
- cin >> x;
- v.push_back(xx(i,j,x));
- }
- }
- sort(v.begin(),v.end());
- long long minn = v[].w;
- for(int i = ;i < v.size();i++)
- {
- int x = v[i].u,y = v[i].v,w = v[i].w;
- long long t = (long long)w*+minn*(n-);
- ans[x] = min(ans[x],min(ans[y]-minn+w,t));
- ans[y] = min(ans[y],min(ans[x]-minn+w,t));
- }
- for(int i = ;i <= n;i++) cout << ans[i] << endl;
- return ;
- }
Codeforces_807的更多相关文章
随机推荐
- C#反射与特性(六):设计一个仿ASP.NETCore依赖注入Web
目录 1,编写依赖注入框架 1.1 路由索引 1.2 依赖实例化 1.3 实例化类型.依赖注入.调用方法 2,编写控制器和参数类型 2.1 编写类型 2.2 实现控制器 3,实现低配山寨 ASP.NE ...
- SQL Server2012高可用之日志传送测试
(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库: 辅助服务器:用于存放主服务器上数据库的一个“镜像”数据库: 监控服务器:用来监控 ...
- 小程序中组件公用属性和data-的使用
属性名 类型 描述 注解 hidden Boo ...
- Unity_Dungeonize 随机生成迷宫
本文对随机生成迷宫的实现思路进行记录,其作用在于为游戏过程提供随机性以及节省开发周期,下面是Dungeonize的结构 随机迷宫的生成主要包括几个阶段 1.生成房间体结构,为墙体,自定义房间,自定义物 ...
- 贪心 + DFS
A New Year party is not a New Year party without lemonade! As usual, you are expecting a lot of gues ...
- VMware Workstation CentOS7 Linux 学习之路(1)--系统安装
前言 很早就想学习Linux了,出去面试很多家公司都问会不会Linux,都很尴尬,一直没学过Linux,在网上也看过很多资料,也安装了VM,自己摸索着学习Linux,之前看网上的一些命令一顿操作, ...
- mysql高级复习
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构,可以简单理解为“排好序的快速查找数据结构”. 数据本身之外,数据库还维护着一 ...
- Scrapy定制命令开启爬虫
一.单爬虫运行 每次运行scrapy都要在终端输入命令太麻烦了 在项目的目录下创建manager.py(任意名称) from scrapy.cmdline import execute if __na ...
- 异数OS 织梦师-云(五)-- 容器服务化,绿色拯救未来。
. 异数OS 织梦师-云(五)– 容器服务化,绿色拯救未来. 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652 ...
- [bzoj4524] [loj#2047] [Cqoi2016] 伪光滑数
Description 若一个大于 \(1\) 的整数 \(M\) 的质因数分解有 \(k\) 项,其最大的质因子为 \(Ak\) ,并且满足 \(Ak^K \leq N\) , \(Ak<12 ...