• NOIP2005提高组题解


    (D1T1) 谁拿了最多奖学金 ((OK))

    (D1T2) 过河 ((OK))

    (D1T3) 篝火晚会 ((OK))

    (D1T4) 等价表达式

    (T4)又是字符串的大模拟题,果断跳过.

    (T1)几个(if)语句来模拟即可.

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    #define ll long long
    using namespace std;
    const int N=105;
    string s[N];
    int main(){
    	int n,qm,bj,lw;char gb,xb;cin>>n;
    	int maxn=0,tot=0,num=0;
    	for(int i=1;i<=n;++i){
    		cin>>s[i]>>qm>>bj>>gb>>xb>>lw;
    		int now=0;
    		if(qm>80&&lw>=1)now+=8000;
    		if(qm>85&&bj>80)now+=4000;
    		if(qm>90)now+=2000;
    		if(qm>85&&xb=='Y')now+=1000;
    		if(bj>80&&gb=='Y')now+=850;
    		if(now>maxn)maxn=now,num=i;
    		tot+=now;
    	}
    	cout<<s[num]<<endl<<maxn<<endl<<tot<<endl;
        return 0;
    }
    

    (T2)之前写过,发现只记得结论了,我觉得这道题除去结论很妙之外,细节也超级多.博客

    (T3)做了好久好久的模拟+结论题.先把目标序列给模拟出来,然后就是一个结论了,对于目标序列(T)和初始序列(S),(S)要变换到(T)的步数为序列中不同的位数.

    然后注意到序列是一个环,所以变换方式有两种,可以向左移也可以向右移.

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    #define ll long long
    using namespace std;
    inline int read(){
        int x=0,o=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')o=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*o;
    }
    const int N=50005;
    int l[N],r[N],a[N],bj[N],L[N],R[N],pos[N],sum1[N],sum2[N];
    int main(){
    	int n=read(),ans=0;
    	for(int i=1;i<=n;++i)l[i]=read(),r[i]=read();
    	a[n-1]=1;a[n]=r[1];a[n-2]=l[1];int now=l[1];
    	L[1]=l[1];R[1]=r[1];R[l[1]]=1;L[r[1]]=1;
    	bj[1]=bj[l[1]]=bj[r[1]]=1;
    	for(int i=n-3;i>=2;--i){
    		if(l[now]==R[now]&&!bj[r[now]]){
    			L[now]=r[now];a[i]=r[now];bj[r[now]]=1;R[r[now]]=now;
    			now=r[now];continue;
    		}
    		if(r[now]==R[now]&&!bj[l[now]]){
    			L[now]=l[now];a[i]=l[now];bj[l[now]]=1;R[l[now]]=now;
    			now=l[now];continue;
    		}
    		puts("-1");return 0;
    	}
    	for(int i=1;i<=n;++i)if(!bj[i]){a[1]=i;break;}
    	if(a[2]+a[n]!=l[a[1]]+r[a[1]]){puts("-1");return 0;}
    	for(int i=1;i<=n;++i){
            ++sum1[(a[i]-i+n)%n];
            ++sum2[(a[n-i+1]-i+n)%n];
        }
        for(int i=0;i<=n-1;i++)ans=max(ans,max(sum1[i],sum2[i]));
        printf("%d
    ",n-ans);
        return 0;
    }
    
    

    (T4)咕咕咕.

  • 相关阅读:
    电路开发软件积累
    .NET移动开发环境搭建
    Microsoft SQL Server Express各版本对比
    .NET IL指令速查表
    C#访问加密的SQLite数据库
    C#中时间计算方法汇总
    最佳C/C++编辑器 source insight3
    常用PHP框架收集
    CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑等
    Windows下Java JDK8配置环境变量
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11822781.html
Copyright © 2020-2023  润新知