A:枚举每个点判断是否同时在两个正方形中即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
struct data
{
int x,y;
void get(){x=read();y=read();}
}a[4],b[4];
bool isin1(int x,int y)
{
int LEFT=1000,RIGHT=-1000,UP=-1000,DOWN=1000;
for (int i=0;i<4;i++)
LEFT=min(LEFT,a[i].x),
RIGHT=max(RIGHT,a[i].x),
UP=max(UP,a[i].y),
DOWN=min(DOWN,a[i].y);
if (LEFT<=x&&RIGHT>=x&&UP>=y&&DOWN<=y) return 1;
else return 0;
}
bool isin2(int x,int y)
{
int LEFT=1000,RIGHT=-1000,UP=-1000,DOWN=1000;
for (int i=0;i<4;i++)
LEFT=min(LEFT,b[i].x),
RIGHT=max(RIGHT,b[i].x),
UP=max(UP,b[i].y),
DOWN=min(DOWN,b[i].y);
int mid1=(LEFT+RIGHT)/2,mid2=(UP+DOWN)/2;
if (abs(x-mid1)+abs(y-mid2)<=mid1-LEFT) return 1;
else return 0;
}
void win(){cout<<"Yes";exit(0);}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
for (int i=0;i<4;i++) a[i].get();
for (int i=0;i<4;i++) b[i].get();
for (int i=-100;i<=100;i++)
for (int j=-100;j<=100;j++)
if (isin1(i,j)&&isin2(i,j)) win();
cout<<"No";
return 0;
//NOTICE LONG LONG!!!!!
}

  B:莫名其妙的题。首先要知道这俩人只想知道他们的共同数字是什么,而不是对方的数字对是什么。先判断啥都不知道能否确定该数字,只要考虑每一对仅有一个数字相同的数对,如果其共同数字都相同,即可确定该数为答案。否则仍考虑每一对可能的数对,如果某一种情况下有一方无法确定共同数字,即输出-1。最后输出0即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m;
struct data{int x,y;
}a[N],b[N];
int calc(data a,data b)
{
return (a.x==b.x)+(a.x==b.y)+(a.y==b.x)+(a.y==b.y);
}
int same(data a,data b)
{
if (a.x==b.x||a.x==b.y) return a.x;
else return a.y;
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
n=read(),m=read();
for (int i=1;i<=n;i++)
{
a[i].x=read(),a[i].y=read();
if (a[i].x>a[i].y) swap(a[i].x,a[i].y);
}
for (int i=1;i<=m;i++)
{
b[i].x=read(),b[i].y=read();
if (b[i].x>b[i].y) swap(b[i].x,b[i].y);
}
int ans=0,uuu;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (calc(a[i],b[j])==1) ans++,uuu=same(a[i],b[j]);
bool flag=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (calc(a[i],b[j])==1&&same(a[i],b[j])!=uuu) flag=1;
if (!flag) {cout<<uuu;return 0;}
ans=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (calc(a[i],b[j])==1)
{
for (int x=1;x<=n;x++)
if (calc(a[x],b[j])==1&&same(a[x],b[j])!=same(a[i],b[j])) {cout<<-1;return 0;}
for (int x=1;x<=m;x++)
if (calc(a[i],b[x])==1&&same(a[i],b[x])!=same(a[i],b[j])) {cout<<-1;return 0;}
}
cout<<0;
return 0;
//NOTICE LONG LONG!!!!!
}

  C:显然答案位置至少在一对飞船的交点上,这个数量级是O(nm)的。预处理每个位置能消灭哪些飞船,bitset存储,然后暴力枚举每一对位置,bitset上or一下count一下就完了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<bitset>
using namespace std;
#define ll long long
#define N 122
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,a[N],b[N],ans;
bitset<N> f[N>>1][N>>1];
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
n=read(),m=read();
for (int i=1;i<=n;i++) a[i]=read();
for (int i=1;i<=m;i++) b[i]=read();
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
for (int x=1;x<=n;x++)
for (int y=1;y<=m;y++)
if (a[i]-a[x]==b[y]-b[j]) f[i][j][x]=1,f[i][j][y+n]=1;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int x=1;x<=n;x++)
for (int y=1;y<=m;y++)
ans=max(ans,(int)(f[i][j]|f[x][y]).count());
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  D:显然二分答案。相当于每将一个功率=x的任务放在第一批,就为功率<x的任务提供了一个垃圾桶。于是按功率从大到小排序,设f[i][j]为前i个任务剩余j个垃圾桶的最小值。唯一的问题是功率相同的任务间不能提供垃圾桶,状态再加一维处理即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 55
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n;
ll f[N][N][N];
struct data
{
ll x,y;
bool operator <(const data&a) const
{
return x>a.x||x==a.x&&y<a.y;
}
}a[N];
bool check(ll k)
{
memset(f,42,sizeof(f));
f[0][0][0]=0;
for (int i=1;i<=n;i++)
{
int t=i;
while (t<n&&a[t+1].x==a[i].x) t++;
for (int j=i;j<=t;j++)
{
for (int x=0;x<=n;x++)
for (int y=0;y<=n;y++)
{
f[j][x][y]=f[j-1][x+1][y];
if (y) f[j][x][y]=min(f[j][x][y],f[j-1][x][y-1]+a[j].x-k*a[j].y);
}
}
i=t;
for (int j=n;j>=0;j--)
for (int x=0;x<=j;x++)
f[i][j][0]=min(f[i][j][0],f[i][j-x][x]);
}
for (int i=0;i<=n;i++) if (f[n][i][0]<=0) return 1;
return 0;
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
n=read();
for (int i=1;i<=n;i++) a[i].x=1000ll*read();
for (int i=1;i<=n;i++) a[i].y=read();
sort(a+1,a+n+1);
ll l=0,r=10000000000000000ll,ans;
while (l<=r)
{
ll mid=l+r>>1;
if (check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  E:显然每个数有用的信息仅仅是其和x的大小,根据这个设为01后,即相当于求和为k的区间个数。又可以转换为前缀和之差为k的区间个数。裸的FFT。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 1100010
#define double long double
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,f[N],r[N];
ll ans[N];
const double PI=3.14159265358979324;
struct complex
{
double x,y;
complex operator +(const complex&a) const
{
return (complex){x+a.x,y+a.y};
}
complex operator -(const complex&a) const
{
return (complex){x-a.x,y-a.y};
}
complex operator *(const complex&a) const
{
return (complex){x*a.x-y*a.y,x*a.y+y*a.x};
}
}a[N],b[N];
void DFT(int n,complex *a,int p)
{
for (int i=0;i<n;i++) r[i]=(r[i>>1]>>1)|(i&1)*(n>>1);
for (int i=0;i<n;i++) if (i<r[i]) swap(a[i],a[r[i]]);
for (int i=2;i<=n;i<<=1)
{
complex wn=(complex){cos(2*PI/i),p*sin(2*PI/i)};
for (int j=0;j<n;j+=i)
{
complex w=(complex){1,0};
for (int k=j;k<j+(i>>1);k++,w=w*wn)
{
complex x=a[k],y=w*a[k+(i>>1)];
a[k]=x+y,a[k+(i>>1)]=x-y;
}
}
}
}
void mul(int n,complex *a,complex *b)
{
DFT(n,a,1),DFT(n,b,1);
for (int i=0;i<n;i++) a[i]=a[i]*b[i];
DFT(n,a,-1);
for (int i=0;i<n;i++) a[i].x=a[i].x/n;
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
n=read(),m=read();
for (int i=1;i<=n;i++) f[i]=(read()<m);
for (int i=1;i<=n;i++) f[i]+=f[i-1];
for (int i=0;i<=n;i++) a[f[i]].x++,b[n-f[i]].x++;
int t=1;while (t<=(n<<1)) t<<=1;
mul(t,a,b);
for (int i=0;i<=n;i++) ans[i]=(ll)(a[i+n].x+0.5);
ans[0]-=n+1;ans[0]/=2;
for (int i=0;i<=n;i++) printf("%I64d ",ans[i]);
return 0;
//NOTICE LONG LONG!!!!!
}

  居然还有我能在场上做五题的div1

Codeforces Round #488 Div. 1的更多相关文章

  1. [Codeforces Round#488]Div.2

    总结 这是我无聊透顶肝到三点半的一场 cf ,结果还真够无聊的 这套题涵盖了英语题,语文题,模拟题.注重考查了选手的英语素养能力,语文阅读能力和精湛的模拟和枚举能力.是不可多得的一套好题. 没什么单独 ...

  2. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  3. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  4. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  5. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  6. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  7. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  8. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  9. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

随机推荐

  1. JavaScript技巧总结和本地存储(二)

    离线检测 检测是否离线,html5为此定义了一个navigator.onLine属性,这个属性为true表示设备能上网,false表示离线,这个属性还有点兼容问题.因此单独使用这个属性不能确定网络是否 ...

  2. 讲一个关于paxos的故事...

    先讲一个故事. 从前,在国王Leslie Lamport的统治下,有个黑暗的希腊城邦叫paxos.城邦里有3类人, 决策者 提议者 群众 虽然这是一个黑暗的城邦但是很民主,按照议会民主制的政治模式制订 ...

  3. 构建前端gulp自动化

    看了很多关于Gulp自动化的相关教程,很感谢大神们的教程, 因为担心自己会忘记啥的,所以就把自己搭建gulp自动化的过程记录下来~~~ gulp是依赖于Nodejs的,所以最好是有点nodejs的基础 ...

  4. Visual studio 2015 Community 安装过程中遇到问题的终极解决

    早就有给自己电脑升级VS的想法,可是安装过程并不顺利,一直拖到现在,昨天下定决心,把遇到的问题一个个解决,终于安装成功了,将安装过程中遇到的问题和解决方法记录一下. 需要说明一下的是,不同的电脑环境可 ...

  5. outlook署名最后一行没换行

    Outlook のプレーン テキスト形式での投稿で改行が削除されます 1.通过更改outlook默认设置可以解决 https://support.microsoft.com/ja-jp/help/28 ...

  6. D - Nature Reserve(cf514,div2)

    题意:给出n(n<=1e5)个点,求一个最小的圆,与x轴相切,并且包含这n个点 思路:我第一想到的是,这个圆一定会经过一个点,再根据与x轴相切,我们可以找到最小的圆,让它包含其余的点,但是如何判 ...

  7. java web石家庄铁道大学课程管理系统

    package kecheng Kc.java package kecheng; public class Kc { private int id; private String classname; ...

  8. bootstrap 弹窗或者提示框插件 bootstrap-growl 和bootstrap-notify

    Bootstrap简单好用的页面右上角咆哮提示框 - daidaineteasy的专栏 - CSDN博客https://blog.csdn.net/daidaineteasy/article/deta ...

  9. 【Python3练习题 015】 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?

    a = [100]  #每个‘反弹落地’过程经过的路程,第1次只有落地(100米) h = 100  #每个‘反弹落地’过程,反弹的高度,第1次为100米 print('第1次从%s米高落地,走过%s ...

  10. array_filter、array_walk、array_map的区别

    <?php $arr=array( 1,2,3,4,5,6 ); function filter($var){ if($var%2==0) return true; } $data=array_ ...