• 9.28 正睿普及3



    2018.9.28 正睿普及3

    时间:(实际)
    期望得分:100+100+100+...100?
    实际得分:100+96+100+0

    比赛链接

    D这种模拟还是趁早放弃好/zj
    放代码自己体会/zj

    C题是搞笑的吧

    过几天能交了再改

    A

    题目链接

    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    #define gc() getchar()
    typedef long long LL;
    const int N=1e6+5;
    
    inline int read()
    {
    	int now=0;register char c=gc();
    	for(;!isdigit(c);c=gc());
    	for(;isdigit(c);now=now*10+c-'0',c=gc());
    	return now;
    }
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    
    	LL a=read(),b=read(),c=read();
    	if(a==1||b==1||c==1) return putchar('0'),0;
    	LL ans=2ll*a*b;
    	ans+=2ll*(b*c-b*2);
    	ans+=2ll*(a*c-c*2-std::max(0ll,a-2)*2);
    	printf("%lld
    ",a*b*c-ans);
    
    	return 0;
    }
    

    B

    题目链接

    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    #define gc() getchar()
    typedef long long LL;
    
    int opt[7];
    LL a,b,c,d,Ans;
    
    inline int read()
    {
    	int now=0,f=1;register char c=gc();
    	for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    	for(;isdigit(c);now=now*10+c-'0',c=gc());
    	return now*f;
    }
    void DFS(int x)//懒得换double怎么办 
    {// 1+ 2- 3* 4/
    	if(x>3)
    	{
    		LL res=0,tmp;
    		if(opt[1]==1||opt[1]==2)
    		{
    			if(opt[2]==1||opt[2]==2)
    			{
    				if(opt[3]==1||opt[3]==2)
    					res=a+(opt[1]==1?b:-b)+(opt[2]==1?c:-c)+(opt[3]==1?d:-d);
    				else
    				{
    					if(opt[3]==4 && c%d) return;
    					tmp=opt[3]==3?c*d:c/d;
    					res=a+(opt[1]==1?b:-b)+(opt[2]==1?tmp:-tmp);
    				}
    			}
    			else
    			{
    				if(opt[2]==4 && b%c)
    				{
    					if(opt[3]==3 && !(b*d%c)) Ans=std::min(Ans,std::abs(a+(opt[1]==1?1ll:-1ll)*b*d/c));
    					return;
    				}
    				tmp=opt[2]==3?b*c:b/c;
    				if(opt[3]==1||opt[3]==2)
    					tmp+=(opt[3]==1?d:-d);
    				else
    				{
    					if(opt[3]==4 && tmp%d) return;
    					tmp=(opt[3]==3?tmp*d:tmp/d);
    				}
    				res=opt[1]==1?a+tmp:a-tmp;
    			}
    		}
    		else//*/
    		{
    			if(opt[1]==4 && a%b)
    			{
    				if(opt[2]==3)
    				{//mmp
    					if(opt[3]==3)
    						if(!(a*c*d%b)) Ans=std::min(Ans,std::abs(a*c*d/b));
    						else return;
    					else if(opt[3]==4)
    						if(!(a*c%(b*d))) Ans=std::min(Ans,std::abs(a*c/b/d));
    						else return;
    					else if(!(a*c%b)) Ans=std::min(Ans,std::abs(a*c/b+(opt[3]==1?d:-d)));
    					else return;
    				}
    				else if(opt[2]==4)
    				{
    					if(opt[3]==3)
    						if(!(a*d%(b*c))) Ans=std::min(Ans,std::abs(a*d/b/c));
    						else return;
    					else return;
    				}
    				return;
    			}
    			tmp=opt[1]==3?a*b:a/b;
    			if(opt[2]==1||opt[2]==2)
    			{
    				if(opt[3]==1||opt[3]==2)
    					res=tmp+(opt[2]==1?c:-c)+(opt[3]==1?d:-d);
    				else
    				{
    					if(opt[3]==4 && c%d) return;
    					res=tmp+(opt[2]==1?(opt[3]==3?c*d:c/d):-(opt[3]==3?c*d:c/d));
    				}
    			}
    			else
    			{
    				if(opt[2]==4 && tmp%c)
    				{
    					if(opt[3]==3 && !(tmp*d%c)) Ans=std::min(Ans,std::abs(tmp*d/c));
    					else return;
    					return;
    				}
    				tmp=opt[2]==3?tmp*c:tmp/c;
    				if(opt[3]==1||opt[3]==2)
    					res=opt[3]==1?tmp+d:tmp-d;
    				else
    				{
    					if(opt[3]==4 && tmp%d) return;
    					res=opt[3]==3?tmp*d:tmp/d;
    				}
    			}
    		}
    //		printf("%d %d %d %I64d
    ",opt[1],opt[2],opt[3],res);
    		Ans=std::min(Ans,std::abs(res));
    		return;
    	}
    	for(int i=1; i<=4; ++i)
    		opt[x]=i, DFS(x+1);
    }
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    
    	a=read(),b=read(),c=read(),d=read();
    	Ans=std::abs(a+b+c+d), DFS(1), printf("%lld
    ",Ans);
    
    	return 0;
    }
    

    C

    题目链接

    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <algorithm>
    #define gc() getchar()
    #define MAXIN 300000
    //#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
    typedef long long LL;
    const int N=1e5+5;
    
    int n,tot,dep[N],fa[N];
    LL Ans;
    std::vector<int> e[N];
    
    inline int read()
    {
    	int now=0;register char c=gc();
    	for(;!isdigit(c);c=gc());
    	for(;isdigit(c);now=now*10+c-'0',c=gc());
    	return now;
    }
    inline void AE(int u,int v)
    {
    	e[u].push_back(v), e[v].push_back(u);
    }
    bool cmp(int x,int y)
    {
    	return dep[x]<dep[y];
    }
    void DFS1(int x)
    {
    	for(int i=0,l=e[x].size(),v; i<l; ++i)
    		if((v=e[x][i])!=fa[x])
    			fa[v]=x, dep[v]=dep[x]+1, DFS1(v);
    }
    void DFS2(int x)
    {
    	static int Time=0;
    
    	Ans+=tot-Time, ++Time;
    //	std::sort(e[x].begin(),e[x].end(),cmp);
    	for(int i=0,l=e[x].size(),v; i<l; ++i)
    		if((v=e[x][i])!=fa[x]) DFS2(v), ++Time;
    }
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    
    	n=read(), tot=2*n-2;
    	for(int i=1; i<n; ++i) AE(read(),read());
    	DFS1(1), DFS2(1);
    	printf("%lld
    ",Ans);
    
    	return 0;
    }
    

    D

    题目链接

    
    

    考试代码

    D

    #include <cstdio>
    #include <cctype>
    #include <cstring>
    #include <algorithm>
    #define gc() getchar()
    typedef long long LL;
    const int N=1e5+7;
    
    int n;
    char s[N];
    
    int Nxt_Oct(int now,int &p)
    {
    	if(now>n) {p=now; return 0;}
    	int nxt,res=0;
    	while(s[now]=='O')
    	{
    		nxt=now+1,res=0;
    		while(nxt<=n && isdigit(s[nxt])) res=res*10+s[nxt]-'0', ++nxt;
    		now=nxt;
    	}
    	p=now;
    	return res;
    }
    void Nxt_Vol(int now,int &p,int &vol,int &ans)
    {
    	int nxt=now+1,res=0,tmp=now;
    	while(s[now]=='V')
    	{
    		nxt=now+1,res=0;
    		while(nxt<=n && isdigit(s[nxt])) res=res*10+s[nxt]-'0', ++nxt;
    		tmp=now, now=nxt;
    	}
    	p=now;
    	for(int i=now; i<=n; ++i)
    		if(isalpha(s[i]) && s[i]!='V' && s[i]!='O') {ans+=now-tmp; break;}
    		else if(i==n) p=n+1;
    	if(res!=vol) vol=res;
    }
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    
    	while(scanf("%s",s+1),s[1]!='*')
    	{
    		n=strlen(s+1), s[n+1]='$';
    
    		int oct=4,real=4,vol=100;//volume
    		int ans=0,now=1;
    		for(; now<=n; )
    		{
    //			printf("n:%d now:%d oct:%d real:%d vol:%d ans:%d
    ",n,now,oct,real,vol,ans);
    			if(s[now]=='V')
    			{
    				int nxt=now+1,res=0,tmp=now;
    				while(s[now]=='V')
    				{
    					nxt=now+1,res=0;
    					while(nxt<=n && isdigit(s[nxt])) res=res*10+s[nxt]-'0', ++nxt;
    					tmp=now, now=nxt;
    				}
    				if(nxt>n) break;
    				if(res!=vol) vol=res, ans+=nxt-tmp;
    			}
    			else if(s[now]=='O')
    			{
    				int nxt,res=oct;
    				while(s[now]=='O')
    				{
    					nxt=now+1,res=0;
    					while(nxt<=n && isdigit(s[nxt])) res=res*10+s[nxt]-'0', ++nxt;
    					now=nxt;
    				}
    				if(nxt>n) break;
    				if(std::abs(oct-res)>1)
    				{
    					if(res>oct) ans+=res-oct-1, oct=res-1;
    					else ans+=oct-res-1, oct=res+1;
    				}
    				real=res;
    			}
    			else if(real==oct)
    			{
    				if(now+1<=n && s[now]=='B' && s[now+1]=='+')
    				{
    					int nxt=now+2,tm=1;
    					while(nxt+1<=n && s[nxt]=='B' && s[nxt+1]=='+') nxt+=2, ++tm;
    					now=nxt;
    					if(tm==1)
    					{
    						if(s[now]!='O'&&s[now]!='V') ;//还有bug mmp 
    						else if(s[now]!='O')
    						{
    							Nxt_Vol(now,now,vol,ans);
    							if(now>n) now=n+1;
    						}
    
    						if(s[now]=='O')
    						{
    							int tmp,nxtoct=Nxt_Oct(now,tmp);
    							now=tmp;
    							while(now<=n && s[now]=='V')
    							{
    								Nxt_Vol(now,now,vol,ans);
    								if(now>n) now=n+1;
    								if(s[now]=='O')
    									nxtoct=Nxt_Oct(now,tmp), now=tmp;
    							}
    							if(tmp>n) ans+=2;
    							else if(nxtoct>oct)
    							{
    								ans+=2, ++oct;
    								real=nxtoct;
    								if(std::abs(oct-real)>1)
    								{
    									if(real>oct) ans+=real-oct-1, oct=real-1;
    									else ans+=oct-real-1, oct=real+1;
    								}
    							}
    							else ans+=2;
    						}
    						else ans+=2;
    					}
    					else ans+=tm+1, ++oct;
    				}
    				else if(now+1<=n && s[now]=='C' && s[now+1]=='-')
    				{
    					int nxt=now+2,tm=1;
    					while(nxt+1<=n && s[nxt]=='C' && s[nxt+1]=='-') nxt+=2, ++tm;
    					now=nxt;
    					if(tm==1)
    					{
    						if(s[now]!='O'&&s[now]!='V') ;
    						else if(s[now]!='O')
    						{
    							Nxt_Vol(now,now,vol,ans);
    							if(now>n) now=n+1;
    						}
    
    						if(s[now]=='O')
    						{
    							int tmp,nxtoct=Nxt_Oct(now,tmp);
    							now=tmp;
    							while(now<=n && s[now]=='V')
    							{
    								Nxt_Vol(now,now,vol,ans);
    								if(now>n) now=n+1;
    								if(s[now]=='O')
    									nxtoct=Nxt_Oct(now,tmp), now=tmp;
    							}
    							if(tmp>n) ans+=2;
    							else if(nxtoct<oct)
    							{
    								ans+=2, --oct;
    								real=nxtoct;
    								if(std::abs(oct-real)>1)
    								{
    									if(real>oct) ans+=real-oct-1, oct=real-1;
    									else ans+=oct-real-1, oct=real+1;
    								}
    							}
    							else ans+=2;
    							now=tmp;
    						}
    						else ans+=2;
    					}
    					else ans+=tm+1, --oct;
    				}
    				else
    				{
    					while(now<=n && ((s[now]=='+'||s[now]=='-')||((s[now]!='V' && s[now]!='O' && (now==n||s[now]!='C'||s[now+1]!='-') && (now==n||s[now]!='B'||s[now+1]!='+')))))
    //						printf("Loop:%d %d %d
    ",ans,now,n),
    						++ans, ++now;
    				}
    			}
    			else if(real>oct)
    			{
    				int tm=0;
    				while(now+1<=n && s[now]=='C' && s[now+1]=='-')
    					++tm, now+=2;
    				ans+=tm;
    
    				if(s[now]!='O'&&s[now]!='V') ;
    				else if(s[now]!='O')
    				{
    					Nxt_Vol(now,now,vol,ans);
    					if(now>n) now=n+1;
    				}
    
    				if(s[now]=='O')
    				{
    					int tmp,nxtoct=Nxt_Oct(now,tmp);
    					if(tmp>n) ;
    					else// if(nxtoct<oct)
    					{
    						real=nxtoct;
    						if(std::abs(oct-real)>1)
    						{
    							if(real>oct) ans+=real-oct-1, oct=real-1;
    							else ans+=oct-real-1, oct=real+1;
    						}
    					}
    					now=tmp;
    				}
    				else if(now<=n) ++ans, ++oct;
    			}
    			else if(real<oct)
    			{
    				int tm=0;
    				while(now+1<=n && s[now]=='B' && s[now+1]=='+')
    					++tm, now+=2;
    				ans+=tm;
    
    				if(s[now]!='O'&&s[now]!='V') ;
    				else if(s[now]!='O')
    				{
    					Nxt_Vol(now,now,vol,ans);
    					if(now>n) now=n+1;
    				}
    
    				if(s[now]=='O')
    				{
    					int tmp,nxtoct=Nxt_Oct(now,tmp);
    					if(tmp>n) ;
    					else// if(nxtoct<oct)
    					{
    						real=nxtoct;
    						if(std::abs(oct-real)>1)
    						{
    							if(real>oct) ans+=real-oct-1, oct=real-1;
    							else ans+=oct-real-1, oct=real+1;
    						}
    					}
    					now=tmp;
    				}
    				else if(now<=n) ++ans, --oct;
    			}
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf" ,“feof”,"fwrite","fread"
    “/”和“\”和feof();
    VS快捷键说明
    vs2015安装VAssistX以后,去除中文注释会有红色下划线方法
    QT5.8+vs2015配置以及qt creater中出现中文乱码解决办法之一
    将ascll码转换成数值进行运算
    二维数组---指针数组和数组指针
    source insight 4.0.086破解
    make clean 和make distclean的区别
    长歌行
  • 原文地址:https://www.cnblogs.com/SovietPower/p/9721740.html
Copyright © 2020-2023  润新知