zoukankan      html  css  js  c++  java
  • 【刷题】AtCoder Regular Contest 001

    A.センター採点

    题意:给一个只包含1234的字符串,求出现次数最多和最少的字符

    做法:还能怎么做。。。

    #include<bits/stdc++.h>
    #define ui unsigned int
    #define ll long long
    #define db double
    #define ld long double
    #define ull unsigned long long
    #define REP(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
    #define DEP(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
    const int MAXN=100+10;
    int n,Mx,Mn,sum[5];
    char s[MAXN];
    template<typename T> inline void read(T &x)
    {
    	T data=0,w=1;
    	char ch=0;
    	while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    	if(ch=='-')w=-1,ch=getchar();
    	while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
    	x=data*w;
    }
    template<typename T> inline void write(T x,char ch='')
    {
    	if(x<0)putchar('-'),x=-x;
    	if(x>9)write(x/10);
    	putchar(x%10+'0');
    	if(ch!='')putchar(ch);
    }
    template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
    template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
    template<typename T> inline T min(T x,T y){return x<y?x:y;}
    template<typename T> inline T max(T x,T y){return x>y?x:y;}
    int main()
    {
    	read(n);scanf("%s",s);Mx=0;Mn=n;
    	REP(i,0,n-1)sum[s[i]-'0']++;
    	REP(i,1,4)chkmax(Mx,sum[i]),chkmin(Mn,sum[i]);
    	printf("%d %d
    ",Mx,Mn);
    	return 0;
    }
    

    B.リモコン

    题意:给定初始温度,每次操作可以改变1度、5度或10度,问变成要求温度的最小操作次数

    做法:由于数据范围太小,于是直接枚举就好了。如果数据范围大的话,可以做一个有负权的背包。

    #include<bits/stdc++.h>
    #define ui unsigned int
    #define ll long long
    #define db double
    #define ld long double
    #define ull unsigned long long
    #define REP(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
    #define DEP(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
    const int inf=0x3f3f3f3f;
    int L,R,n,ans=inf;
    template<typename T> inline void read(T &x)
    {
    	T data=0,w=1;
    	char ch=0;
    	while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    	if(ch=='-')w=-1,ch=getchar();
    	while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
    	x=data*w;
    }
    template<typename T> inline void write(T x,char ch='')
    {
    	if(x<0)putchar('-'),x=-x;
    	if(x>9)write(x/10);
    	putchar(x%10+'0');
    	if(ch!='')putchar(ch);
    }
    template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
    template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
    template<typename T> inline T min(T x,T y){return x<y?x:y;}
    template<typename T> inline T max(T x,T y){return x>y?x:y;}
    int main()
    {
    	read(L);read(R);n=abs(R-L);
    	REP(i,-4,4)REP(j,-8,8)REP(k,-40,40)if(i*10+j*5+k==n)chkmin(ans,abs(i)+abs(j)+abs(k));
    	write(ans,'
    ');
    	return 0;
    }
    

    C.パズルのお手伝い

    题意:棋盘确定了一些位置,问能不能摆成八皇后形式

    做法:搜索。而且有可能一开始输进来的局面就不合法,我被这个坑到了

    #include<bits/stdc++.h>
    #define ui unsigned int
    #define ll long long
    #define db double
    #define ld long double
    #define ull unsigned long long
    #define REP(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
    #define DEP(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
    int row[10],dia[2][20],line[10];
    char s[10];
    template<typename T> inline void read(T &x)
    {
    	T data=0,w=1;
    	char ch=0;
    	while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    	if(ch=='-')w=-1,ch=getchar();
    	while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
    	x=data*w;
    }
    template<typename T> inline void write(T x,char ch='')
    {
    	if(x<0)putchar('-'),x=-x;
    	if(x>9)write(x/10);
    	putchar(x%10+'0');
    	if(ch!='')putchar(ch);
    }
    template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
    template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
    template<typename T> inline T min(T x,T y){return x<y?x:y;}
    template<typename T> inline T max(T x,T y){return x>y?x:y;}
    inline void print()
    {
    	REP(i,1,8)
    	{
    		REP(j,1,8)
    			if(line[i]==j)putchar('Q');
    			else putchar('.');
    		putchar('
    ');
    	}
    }
    inline void dfs(int x)
    {
    	if(x>8)print(),exit(0);
    	if(line[x])dfs(x+1);
    	else
    		REP(i,1,8)if(!row[i]&&!dia[0][x+i]&&!dia[1][x-i+8])
    		{
    			line[x]=i;
    			row[i]=dia[0][x+i]=dia[1][x-i+8]=1;
    			dfs(x+1);
    			line[x]=row[i]=dia[0][x+i]=dia[1][x-i+8]=0;
    		}
    }
    int main()
    {
    	REP(i,1,8)
    	{
    		scanf("%s",s+1);
    		REP(j,1,8)if(s[j]=='Q')
    		{
    			if(line[i]||row[j]||dia[0][i+j]||dia[1][i-j+8])
    			{
    				puts("No Answer");
    				return 0;
    			}
    			else line[i]=j,row[j]=dia[0][i+j]=dia[1][i-j+8]=1;
    		}
    	}
    	dfs(1);
    	puts("No Answer");
    	return 0;
    }
    

    D.レースゲーム

    题意:给两条贯穿上下的折线,问从最下方一个点保证在两条折线中间走到最上方一个点的最小距离

    做法:一个想法是先确定好每层要走到的点,答案就可以直接算。但是,由于每层中间部分的不确定,所以无法直接确定每层走到的点。但是我们向上走只有两种偏向,向左或向右。所以我们记录从当前点向左和向右走的路径,不断向上扫,如果出现某一层的区间完全在上一区间的左边,那么这次肯定走到上一区间的左端点;反之右端点。一直走上去就是正确路线了。

    #include<bits/stdc++.h>
    #define ui unsigned int
    #define ll long long
    #define db double
    #define ld long double
    #define ull unsigned long long
    #define REP(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
    #define DEP(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
    const int MAXN=200000+10;
    int n,st,ed,l[MAXN],r[MAXN];
    std::pair<db,db> L,R,now,nL,nR;
    db ans;
    template<typename T> inline void read(T &x)
    {
    	T data=0,w=1;
    	char ch=0;
    	while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    	if(ch=='-')w=-1,ch=getchar();
    	while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
    	x=data*w;
    }
    template<typename T> inline void write(T x,char ch='')
    {
    	if(x<0)putchar('-'),x=-x;
    	if(x>9)write(x/10);
    	putchar(x%10+'0');
    	if(ch!='')putchar(ch);
    }
    template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
    template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
    template<typename T> inline T min(T x,T y){return x<y?x:y;}
    template<typename T> inline T max(T x,T y){return x>y?x:y;}
    #define x first
    #define y second
    inline db hypot(std::pair<db,db> A)
    {
    	return sqrt(A.x*A.x+A.y*A.y);
    }
    inline db cross(std::pair<db,db> A,std::pair<db,db> B)
    {
    	return A.x*B.y-A.y*B.x;
    }
    int main()
    {
    	read(n);read(st);read(ed);n++;st++;ed++;
    	REP(i,1,n)read(l[i]),read(r[i]),l[i]++,r[i]++;
    	l[1]=r[1]=st;
    	l[n]=r[n]=ed;
    	now=std::make_pair(st,1);
    	for(register int i,j;j<=n;)
    	{
    		i=now.y+1,j=i+1;
    		L=std::make_pair((db)(l[i]-now.x),(db)(i-now.y));
    		R=std::make_pair((db)(r[i]-now.x),(db)(i-now.y));
    		while(j<=n)
    		{
    			nL=std::make_pair((db)(l[j]-now.x),(db)(j-now.y));
    			nR=std::make_pair((db)(r[j]-now.x),(db)(j-now.y));
    			if(cross(R,nL)<0)
    			{
    				ans+=hypot(R);
    				now=std::make_pair(now.x+R.x,now.y+R.y);
    				break;
    			}
    			if(cross(L,nR)>0)
    			{
    				ans+=hypot(L);
    				now=std::make_pair(now.x+L.x,now.y+L.y);
    				break;
    			}
    			if(cross(R,nR)>0)R=nR;
    			if(cross(L,nL)<0)L=nL;
    			++j;
    		}
    	}
    	ans+=hypot(std::make_pair((db)ed-now.x,(db)n-now.y));
    	printf("%.14f
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    struct 结构体解析(原)
    C++标准编程:虚函数与内联
    基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
    直接用编译器按ctrl+F5运行和双击运行结果不一样
    驱动编译的时候注意编译工程选项
    驱动编译的时候注意编译工程选项
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
  • 原文地址:https://www.cnblogs.com/hongyj/p/9757502.html
Copyright © 2011-2022 走看看