Codeforces Round #522 Div. 1 没打记
开场被A劝退,写了得有50min于是不敢交了。unrated了喜闻乐见。
A:瞎猜都能猜到如果要走到那条直线上,进入直线的点横坐标或纵坐标与起点相同,离开直线的点横坐标或纵坐标与终点相同,证明脑补一下比较显然(事实上也就是以起点终点为对角点构成的矩形与该直线的交点)。看错题以为到直线上的那个点必须是整点,于是搞了半天exgcd。然而就算这样也不至于写这么长时间啊根本不知道自己在干啥。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define double long double
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
double ans,A,B,C,lx,ly,rx,ry;
double dis_m(double x,double y,double p,double q){return fabs(x-p)+fabs(y-q);}
double dis_o(double x,double y,double p,double q){return sqrt((p-x)*(p-x)+(y-q)*(y-q));}
struct data{double x,y;
}a[],b[];
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
A=read(),B=read(),C=read();
lx=read(),ly=read(),rx=read(),ry=read();
ans=fabs(rx-lx)+fabs(ry-ly);
if (A&&B)
{
a[].x=lx,a[].y=(-C-A*lx)/B;
a[].y=ly,a[].x=(-C-B*ly)/A;
b[].x=rx,b[].y=(-C-A*rx)/B;
b[].y=ry,b[].x=(-C-B*ry)/A;
for (int i=;i<;i++)
for (int j=;j<;j++)
ans=min(ans,dis_m(lx,ly,a[i].x,a[i].y)+dis_o(a[i].x,a[i].y,b[j].x,b[j].y)+dis_m(b[j].x,b[j].y,rx,ry));
}
printf("%.6Lf\n",ans);
return ;
}
B:题意比较奇怪,做法相当显然,肯定要保证所有满足询问给出的条件的子集都只包含同一单一数字,类似背包的算一发方案数就行了,可以取个模。看起来询问补集也是一种询问方式,不过稍微想一下就知道是没有必要的。但这带来一种特殊情况,即只有两种数字时输出n。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 110
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],ans;
int f[N][N*N],C[N][N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
#endif
n=read();
for (int i=;i<=n;i++) a[i]=read();
f[][]=;
for (int i=;i<=n;i++)
for (int k=i;k>=;k--)
for (int j=;j>=a[i];j--)
f[k][j]=(f[k][j]+f[k-][j-a[i]])%P;
C[][]=;
for (int i=;i<=n;i++)
{
C[i][]=C[i][i]=;
for (int j=;j<i;j++)
C[i][j]=(C[i-][j-]+C[i-][j])%P;
}
sort(a+,a+n+);
int cnt=;
for (int i=;i<=n;i++)
{
int t=i;
cnt++;
while (t<n&&a[t+]==a[i]) t++;
for (int j=i;j<=t;j++)
if (C[t-i+][j-i+]==f[j-i+][(j-i+)*a[i]]) ans=max(ans,j-i+);
i=t;
}
if (cnt==) {cout<<n;return ;}
cout<<ans;
return ;
}
C:考虑清楚最大匹配唯一究竟是什么。冷静分析能够发现其充要条件是该树只包含一个点或存在完美匹配。充分性比较显然,对于必要性,考虑如果不存在完美匹配,最大匹配中未匹配点的周围一定存在匹配点,可以将该匹配点改为与未匹配点匹配而匹配数不变,于是方案不唯一。那么就可以瞎dp了,我自己的做法是设f[i][0/1/2]分别表示 割开i与父亲的边,子树内的森林都满足条件/不割开i与父亲的边,i不与子树内点匹配/不割开i与父亲的边,i与子树内点匹配 的删边方案数,比较显然的有f[i][2]=Σ(f[k][1]·∏(f[son][0]+f[son][2])) (k为i某个儿子,son为除k以外i的儿子们) f[i][0]=f[i][2]+∏f[son][0] f[i][1]=∏(f[son][0]+f[son][2])。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 300010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,p[N],f[N][],pre[N],suf[N],t;
struct data{int to,nxt;
}edge[N<<];
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
void dfs(int k,int from)
{
f[k][]=f[k][]=;f[k][]=;int son=;pre[]=;
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) dfs(edge[i].to,k);
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) pre[++son]=(f[edge[i].to][]+f[edge[i].to][])%P;
suf[son+]=;for (int i=;i<=son;i++)suf[i]=pre[i];
for (int i=;i<=son;i++) pre[i]=1ll*pre[i-]*pre[i]%P;
for (int i=son;i>=;i--) suf[i]=1ll*suf[i+]*suf[i]%P;
int cnt=;
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from)
{
cnt++;
f[k][]=(f[k][]+1ll*f[edge[i].to][]*pre[cnt-]%P*suf[cnt+])%P;
f[k][]=1ll*f[k][]*f[edge[i].to][]%P;
}
f[k][]=(f[k][]+f[k][])%P;
f[k][]=pre[son];
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
#endif
n=read();
for (int i=;i<n;i++)
{
int x=read(),y=read();
addedge(x,y),addedge(y,x);
}
dfs(,);
cout<<f[][];
return ;
}
D:https://www.cnblogs.com/Gloid/p/9874122.html 可能和这个题比较相似。倍增算出每只鹦鹉的影响区间扩展2k次能到哪即可。只是口胡,不知道有没有锅。
Codeforces Round #522 Div. 1 没打记的更多相关文章
- Codeforces Round #518 Div. 1没翻车记
A:设f[i][j][0/1]为前i个数第i位为j且第i位未满足/已满足限制的方案数.大力dp前缀和优化即可. #include<iostream> #include<cstdio& ...
- Educational Codeforces Round 58 Div. 2 自闭记
明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...
- Codeforces Round#402(Div.1)掉分记+题解
哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...
- Codeforces Round #554 (Div. 2)自闭记
A 签到 #include<bits/stdc++.h> using namespace std; ],t[],ans; int main() { scanf("%d%d&quo ...
- Codeforces Round #530 Div. 1 自闭记
A:显然应该让未确定的大小尽量大.不知道写了啥就wa了一发. #include<iostream> #include<cstdio> #include<cmath> ...
- Codeforces Round #528 Div. 1 自闭记
整天自闭. A:有各种讨论方式.我按横坐标排了下然后讨论了下纵坐标单调和不单调两种情况.写了15min也就算了,谁能告诉我printf和cout输出不一样是咋回事啊?又调了10min啊?upd:突然想 ...
- Codeforces Round #526 Div. 1 自闭记
日常猝死. A:f[i]表示子树内包含根且可以继续向上延伸的路径的最大价值,统计答案考虑合并两条路径即可. #include<iostream> #include<cstdio> ...
- Codeforces Round #525 Div. 2 自闭记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- Codeforces Round #406 (Div. 2)滚粗记
A 一看到题,不是一道解不定方程的裸题吗,调了好久exgcd. 其实一个for就好了啊 B 一直WA ON TEST 7真是烦,一想会不会是编号太大了,又写了一个map版本,无用. 调了好久好久才发现 ...
随机推荐
- TableView滑动时候出现的卡顿现象
分析 UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动). 它内部包含0到多个UITableViewCell对象,每个table cell展示各自的 ...
- CentOS 5/6上安装EPEL源
转自:http://www.vckai.com/p/25 EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fe ...
- iOS - Foundation相关
1.NSString A.创建的方式: stringWithFormat:格式化字符串 ,创建字符串对象在堆区域 @"jack& ...
- 使用unittest里面的discover()方法组织测试用例
import osimport unittest directory = os.getcwd()# 测试用例的目录organize = unittest.defaultTestLoader.disco ...
- 第5章 Linux网络编程基础
第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...
- Python常用函数--文档字符串DocStrings
Python 有一个甚是优美的功能称作python文档字符串(Documentation Strings),在称呼它时通常会使用另一个短一些的名字docstrings.DocStrings 是一款你应 ...
- [JSON].getObj( keyPath )
语法:[JSON].getObj( keyPath ) 返回:[JSON] 说明:返回指定键名路径的JSON对象,指定键名路径不存在时返回空的toJson对象(强烈建议使用 [JSON].exists ...
- Vue 编程之路(二)——跳转页面传值
最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型.其中我负责的部分有一项需要跳转页面,由于跳转前的页面是多个组件构成的,所以在跳转页面的 ...
- spark相关脚本解析
spark-shell/spark-submit/pyspark等关系如下: #spark-submit 逻辑: ########################################### ...
- python图片大小处理;
循环一个目录将下面的所有png或者jpg文件全部缩小一定比例: from PIL import Image import os,re work_dir = 'C:\\Users\\Admini ...