zoukankan      html  css  js  c++  java
  • 2018 计蒜之道 初赛 第三场

    这次我是真的菜,对着T1YY了一堆类似于玄学二分+尺取法的东西

    原来是个结论题,然后过了20min才去写T2,虽然1次A,但已经崩了

    下面开始讲题

    A. 贝壳找房性价比

    这是一个神坑题,我们将题意抽象一下

    就是在一个二维平面内找出斜率最大的点对

    这个就是很性质了,我们将所有点按照横坐标(即s)排序后,对于所有三个点的情况,如下都可以发现:

    简单分析后我们得出:AB的斜率大于AC与BC的斜率;BC的斜率大于AC与AB的斜率

    然后便有结论:最大的斜率只有可能在相邻的两个数之间

    然后就可以A掉了

    CODE

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=1e5+5;
    struct data
    {
    	int s,p;
    }a[N];
    double ans=0;
    int t,n;
    inline char tc(void)
    {
    	static char fl[100000],*A=fl,*B=fl;
    	return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
    }
    inline void read(int &x)
    {
    	x=0; char ch=tc(); int flag=1;
    	while (ch<'0'||ch>'9') { if (ch=='-') flag=-1; ch=tc(); }
    	while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
    	x*=flag;
    }
    inline bool comp(data a,data b)
    {
    	return a.s<b.s;
    }
    inline double max(double a,double b)
    {
    	return a>b?a:b;
    }
    inline int abs(int x)
    {
    	return x>0?x:-x;
    }
    int main()
    {
    	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
    	register int i; read(t);
    	while (t--)
    	{
    		for (read(n),i=1;i<=n;++i)
    		read(a[i].s),read(a[i].p);
    		sort(a+1,a+n+1,comp); bool flag=1;
    		for (ans=0.0,i=2;i<=n;++i)
    		if (a[i].s==a[i-1].s) { flag=0; break; } else ans=max(ans,(double)abs(a[i].p-a[i-1].p)/(a[i].s-a[i-1].s));
    		if (flag) printf("%.6lf
    ",ans); else puts("-1");
    	}
    	return 0;
    }
    

    B. 贝壳找房户外拓展(简单)

    这道题就比较简单了,我们直接暴力模拟即可

    这里有一个优化,记录一下当前颜色在那一列

    CODE

    #include<cstdio>
    using namespace std;
    typedef long long LL;
    const LL N=1005,mod=323232323;
    LL n,m,t,tot,p[N],q[N],a[N][N],l[N],x,y,z;
    inline char tc(void)
    {
    	static char fl[100000],*A=fl,*B=fl;
    	return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
    }
    inline void read(LL &x)
    {
    	x=0; char ch=tc(); 
    	while (ch<'0'||ch>'9') ch=tc(); 
    	while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
    }
    inline void write(LL x)
    {
    	if (x/10) write(x/10);
    	putchar(x%10+'0');
    }
    inline void paint(LL x,LL y,LL z,LL num)
    {
    	for (register LL i=x;i<=y;++i)
    	a[i][z]=num;
    }
    inline LL move(LL x,LL y,LL z)
    {
    	LL ans=0;
    	for (register LL i=y;i<=z;++i)
    	if (a[x][i]) ans=(ans*p[a[x][i]]+q[a[x][i]])%mod;
    	return ans;
    }
    inline void del(LL num,LL x)
    {
    	for (register LL i=1;i<=n;++i)
    	if (a[i][x]==num) a[i][x]=0;
    }
    int main()
    {
    	//freopen("T2.in","r",stdin); freopen("T2.out","w",stdout);
    	register LL i,j;
    	read(n); read(m); read(t);
    	while (t--)
    	{
    		char ch=tc(); while (ch!='I'&&ch!='Q'&&ch!='D') ch=tc(); 
    		if (ch=='I') 
    		{
    			read(x); read(y); read(z); read(p[++tot]); read(q[tot]);
    			l[tot]=z; paint(x,y,z,tot);	
    		}
    		if (ch=='Q')
    		{
    			read(x); read(y); read(z);
    			write(move(x,y,z)); putchar('
    ');
    		}
    		if (ch=='D') read(x),del(x,l[x]);
    	}
    	return 0;
    }
    

    C. 贝壳找房户外拓展(中等)&&D. 贝壳找房户外拓展(困难)

    这个题目还是难度比较高的,需要扫描线+线段树维+标记永久化

    留着等以后姿势高了再来补

  • 相关阅读:
    影视感悟
    缩写字母
    从工程文化和运维理念理解Netflix
    telinit:Did not receive a reply.Possible causes include:the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired
    centos6 ext4修复
    windows显示日期时间(精确到秒)
    【C#】IDispose接口的应用
    【转】【WPF】WPF 自定义快捷键命令(Command)
    【转】【WPF】MVVM模式的3种command
    【转】【WPF】WriteableBitmap应用及图片数据格式转换
  • 原文地址:https://www.cnblogs.com/cjjsb/p/9073817.html
Copyright © 2011-2022 走看看