2019icpc银川网络赛
外面吵得风生水起,我校平静地在打比赛,丝毫不知道这次比赛的题目就是把2018银川邀请赛的题照搬过来了QAQ,主办方真牛逼。。
A Maximum(思维)
题意:维护一个栈,支持入栈和出栈操作,并计算每次操作后的栈中最大值,得到最终结果。
思路:
这题真的是,我和hxc轮流做这道题,被坑惨了,一直以为使用数据结构来做,没想到点上去。思维题,每次保证栈顶为栈中最大元素。如果当前入栈的元素为x,当前栈顶元素为y,如果x>=y,这个没问题,直接入栈就行了; 如果x<y,我们相当于直接用y替换x,再入栈即可。
吸取教训,这种过的人很多的,不要想复杂,怎么简单怎么来。
AC代码:
#include<cstdio>
#include<algorithm>
#include<set>
#include<map>
using namespace std; const int maxn=5e6+;
typedef unsigned int UI;
int T,cas,top;
UI stk[maxn];
long long ans; int n,p,q,m;
unsigned int SA,SB,SC;
unsigned int rng61(){
SA^=SA<<;
SA^=SA>>;
SA^=SA<<;
unsigned int t=SA; SA=SB;
SB=SC;
SC^=t^SA;
return SC;
} void gen(){
scanf("%d%d%d%d%u%u%u",&n,&p,&q,&m,&SA,&SB,&SC);
for(int i=;i<=n;++i){
if(rng61()%(p+q)<p){
stk[++top]=rng61()%m+;
stk[top]=max(stk[top-],stk[top]);
}
else
if(top>) --top;
ans^=1LL*i*stk[top];
}
} int main(){
scanf("%d",&T);
while(T--){
ans=;
top=;
gen();
printf("Case #%d: %lld\n",++cas,ans);
}
return ;
}
B. Rolling The Polygon
hxc写得。
AC代码:
#pragma GCC optimize(2)
#include <cstdio>
#include <queue>
#include <string>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <fstream>
#include <cassert>
#define ll long long
#define R register int
#define I inline void
#define lc c[x][0]
#define rc c[x][1] using namespace std;
const int INF = 0x3f3f3f3f; const int maxn = ;
struct node
{
double x,y;
}pp[maxn],qq; double rad(node a,node b,node c)
{
return acos(((a.x - b.x) * (c.x - b.x) + (a.y - b.y) * (c.y - b.y)) / sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)) / sqrt((c.x - b.x) * (c.x - b.x) + (c.y - b.y) * (c.y - b.y)));
} int t,n;
int main()
{
scanf("%d",&t);
int o = t;
while(t--)
{
double ans = ;
scanf("%d",&n);
for(int i = ; i <= n; i++)
scanf("%lf%lf",&pp[i].x,&pp[i].y);
scanf("%lf%lf",&qq.x,&qq.y); for(int i = ; i <= n; i++)
{
//printf("%qwe%lf\n",rad(pp[(i - 2 + n * 2) % n + 1],pp[i],pp[i % n + 1]));
double temp = sqrt((qq.x - pp[i].x) * (qq.x - pp[i].x) + (qq.y - pp[i].y) * (qq.y - pp[i].y));
ans += temp * (M_PI - rad(pp[(i - + n * ) % n + ],pp[i],pp[i % n + ]));
}
printf("Case #%d: %.3lf\n",o - t,ans);
}
}
C. Ceasar Cipher (水题,模拟就行了)
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std; int T,n,m,cas,num;
char s1[],s2[],s3[]; int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
scanf("%s%s%s",s1,s2,s3);
num=(s1[]-s2[]+)%;
printf("Case #%d: ",++cas);
for(int i=;i<m;++i)
printf("%c",(s3[i]-'A'+num)%+'A');
printf("\n");
}
return ;
}
D. Moving On (概率)
题意:
第一问:n个人对应n个座位,按1~n的顺序选择,1号任意选,i号选i(如果i未选)或任意选(如果i已选),i>=2,求最后一个选的人选对的概率。
第二问:m个人对应m个座位,按任意次序选择(m!种排列),1号任意选,i号选i(如果i未选)或任意选(如果i已选),i>=2,求最后一个选的人选对的概率。
思路:
第一问dfs打表发现概率为0.5,第二种情况对于m!种排列:
如果1在最后选,那么一定能选对,概率为1,有(m-1)!种。
如果1不在最后,1前面的一定能选对,从1开始往后的就变成第1问,概率为0.5,有m!-(m-1)!种。
故第二种概率为(m-1)!/m!*1+(m!-(m-1)!)/m!*0.5=(m+1)/(2*m)。
刚开始算错了,卡了两小时QAQ。。
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std; int T,n,m,cas; int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
printf("Case #%d: ",++cas);
if(n==) printf("1.000000 ");
else printf("0.500000 ");
printf("%.6f\n",1.0*(m+)/(2.0*m));
}
return ;
}
F. Moving On(floyd变形)
题意:给定一个图,每个点有个权值r[i],多次询问,每次询问u到v的最短路,且该最短路不经过权值大于w的点。
思路:按权值进行排序,然后floyd,dp[k][i][j]表示经过排序后的前k个点i到j的最短路。询问的时候二分查找即可。但是这题似乎卡常,我定义数组dp[i][j][k]会T,而dp[k][i][j]就A了。绝望-_-。。
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=;
const int inf=0x3f3f3f3f;
int T,cas,n,m;
int u,v,w,dp[maxn][maxn][maxn]; struct node{
int val,id;
}a[maxn]; bool operator < (const node& x,const node& y){
return x.val<y.val;
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i){
scanf("%d",&a[i].val);
a[i].id=i;
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
scanf("%d",&dp[][i][j]);
sort(a+,a+n+);
for(int k=;k<=n;++k)
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
dp[k][i][j]=min(dp[k-][i][j],dp[k-][i][a[k].id]+dp[k-][a[k].id][j]);
printf("Case #%d:\n",++cas);
while(m--){
scanf("%d%d%d",&u,&v,&w);
int l=,r=n,mid;
while(l<=r){
mid=(l+r)>>;
if(a[mid].val<=w) l=mid+;
else r=mid-;
}
printf("%d\n",dp[r][u][v]);
}
}
return ;
}
2019icpc银川网络赛的更多相关文章
- 线段树+单调栈+前缀和--2019icpc南昌网络赛I
线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...
- 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)
2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...
- 2019icpc南京网络赛_F_Greedy Sequence
题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...
- 2019icpc南昌网络赛_I_Yukino With Subinterval
题意 给定一个序列,两种操作,单点修改,询问区间\([l,r]\)值域在\([x,y]\)范围内的连续段个数. 分析 原数组为\(a\),构造一个新的数组\(b\),\(b[i]=(a[i]==a[i ...
- 2019icpc徐州网络赛_I_query
题意 给定一个序列,多次询问区间\([l,r]\)中满足\(min(a[i],a[j])==gcd(a[i],a[j])\)的数对\((i,j)\)数. 分析 其实就是求区间有倍数关系的数对数. 由于 ...
- 2019ICPC 上海网络赛 G题 Substring(哈希)
题意: 给了一个母串S, 每次循环给了一个模板串,问模板串在母 串中“匹配”了多少次?“匹配”的意思就是首字母和尾字母一样, 中间字母顺序可以换. 题解: 字符串hash.我们将询问字符串的首尾特殊h ...
- 2019ICPC徐州网络赛 A.Who is better?——斐波那契博弈&&扩展中国剩余定理
题意 有一堆石子,两个顶尖聪明的人玩游戏,先取者可以取走任意多个,但不能全取完,以后每人取的石子数不能超过上个人的两倍.石子的个数是通过模方程组给出的. 题目链接 分析 斐波那契博弈有结论:当且仅当石 ...
- 2019ICPC南京网络赛B super_log——扩展欧拉定理
题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if ...
- 2019ICPC南昌网络赛总结
打的很崩的一场比赛.上来签到题我就wa了一发,感觉在梦游.然后我开了H题,队友开B题,f(n)=3f(n-1)+2f(n)傻子都知道矩阵快速幂,但是1e7的强制在线必须把logn优化,然后试图打表寻找 ...
随机推荐
- Educational Codeforces Round 33 (Rated for Div. 2) C题·(并查集变式)
C. Rumor Vova promised himself that he would never play computer games... But recently Firestorm — a ...
- P2502 [HAOI2006]旅行 最小生成树
思路:枚举边集,最小生成树 提交:1次 题解:枚举最长边,添加较小边. #include<cstdio> #include<iostream> #include<algo ...
- ActiveMQ介绍
一.背景 中间件 由于业务的不同.技术的发展.硬件和软件的选择有所差别,导致了异构组件或应用并存的局面.要使这些异构的组件协同工作,一个有效的方式就是提供一个允许它们进行通信的层,该层即为中间件. 在 ...
- 转:Jmeter文件上传、下载
一.上传/下载的过程. 上传的过程就是你把你本地的文件,扔到服务器上的这么一个过程. 下载呢,就是把服务器上的文件拿过来,然后存到你本地的这么一个过程. 总结 ...
- 2017 ZSTU寒假排位赛 #3
题目链接:https://vjudge.net/contest/147974#overview. A题,费用流,不会..跳过了. B题,给一个图,问至少添加几条边能成为强连通图.显然缩点,要使得成为一 ...
- ACM之路(18)—— 矩阵
矩阵是干什么的呢?一句话来说就是,知道相邻两个函数的递推关系和第一个数,让你递推到第n个数.显然,如果n很大,那么一个一个递推过去是会超时的.所以矩阵就是用来解决这种快速递推的问题的. 比方说斐波那契 ...
- OpenDayLight安装Features
OpenDayLight 0.4.4-Beryllium-SR4 opendaylight-user@root>feature:install odl-restconf opendaylight ...
- Django1.6 + jQuery Ajax + JSON 实现页面局部实时刷新
最近微信公众帐号要扩展做一个签到系统,签到结果在一个网页上实时更新,即页面局部刷新.我想用Ajax来实现,之前公众帐号是用的Django搭的,我查找了Django的官方文档,没有封装Ajax.网上有各 ...
- SDN上机第4次作业
1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) 1)JDK的安装与环境配置 嗯,装这个东西还得先装JDK: 在线真人手把手教你安装jdk 输入sud ...
- 对 Python 迭代的深入研究
在程序设计中,通常会有 loop.iterate.traversal 和 recursion 等概念,他们各自的含义如下: 循环(loop),指的是在满足条件的情况下,重复执行同一段代码.比如 Pyt ...