2019寒假集训新生考试 【持续更新中】

2019寒假集训新生考试—NEFU 0107

emoji表情包

Problem A nefu 2101 28的因子

⭐️ 本题使用暴力枚举,统计n可以分成几个4和7, 为了防止TLE ,先统计4的个数,然后再算使用否有7,若有7,则统计7的个数。最后为了保证输出的数最小,先输出4,再输出7!
02.03

#include  
using namespace std;
int ans1,ans2;
int n,i,j;
int flag;
int main()
{
    while (cin>>n)
    {
        flag=0;//做标记
        for (i=0;i<=n;i+=4)
        {
            if ((n-i)%7==0)
            {
                flag=1;//存在
                ans1=i/4;
                ans2=(n-i)/7;//记录4和7的个数
                break;//因为要取最小的,所以break
            }
        }
        if (flag==0)
            printf("xinganheixiong\n");
        else
        {
            for(i=0;i<ans1;i++)
                printf("4");
            for(i=0;i<ans2;i++)
                printf("7");//先输出4保证数最小
            printf("\n");
        }
    }
    return 0;
}

Problem B nefu 2077 陈老师发奖金
#include 
#include 
using namespace std;
struct student
{
    int num;//学号
    int a,b,c;//b最后
    int d;//a,c之和
    int t;//输入顺序
} a[100005];
int cmp(const struct student &a,const struct student &b)
{
    if(a.d!=b.d)
    {
        return a.d>b.d;
    }
    else if (a.d==b.d)
    {
        if (a.b!=b.b)
            return a.b>b.b;
        else return a.t>b.t;
    }
}
int main()
{
    int n;//人数
    while (cin>>n)
    {
        for (int i=1; i<=n; i++)
        {
            cin>>a[i].num>>a[i].a>>a[i].b>>a[i].c;
            a[i].d=a[i].a+a[i].c;
            a[i].t=i;
        }
        sort(a+1,a+1+n,cmp);
        if (n<=4)
        {
            for (int i=1; i<=n; i++)
                printf("%d %d\n",a[i].num,a[i].d);
        }
        else if(n>4)
        {
            for (int i=1; i<=4; i++)
                printf("%d %d\n",a[i].num,a[i].d);
        }

    }

    return 0;
}
Problem C nefu 2096 小明分蛋糕

一直TLE的代码 啊啊啊啊

#include 
#include 
using namespace std;
int a,b;
int ans;
int l,r,mid,d,w;
int i,j;
int check(int d)
{
    int ans=0;
    int a1=min(a,b);
    int b1=max(a,b);
    for (i=0;;i++)
    {
        if (a1+5<=b1)
        a1+=5,ans++;
        if (a1+5>b1)
        {
            if (a1+2<=b1)
                a1+=2,ans++;
            if (a1+2>b1)
            {
                if (a1+1<=b1)
                    a1+=1,ans++;
                if (a1+1>b1)
                break;
            }
        }
    }
    if (ans<=d) return 1;
    else return 0;
}
int main()
{
    //ios::sync_with_stdio(false);
    int t;
    scanf("%d",&t);
    while (t--)
    {
        scanf("%d %d",&a,&b);
        w=0;
        if (a==b)
            printf("0\n");
        else
        {
            r=max(a,b)-min(a,b);
            l=1;
            while (r>=l)
            {
                mid=(r+l)/2;
                if (check(mid)==1)
                {
                    r=mid-1;
                    w=mid;
                }
                else l=mid+1;
            }
            printf("%d\n",w);
        }
    }
    return 0;
}

⭐️ AC代码太不容易了。其实这道题很简单,是我之前想复杂了,增加了时间复杂度,所以才一直TLE
⭐️ 注意fabs是取绝对值的函数
02.03

#include 
using namespace std;
int t,a,b;
int x;//两数差的绝对值
int main()
{
    int sum;
    cin>>t;
    while (t--)
    {
        sum=0;
        cin>>a>>b;
        x=fabs(a-b);//fabs是取绝对值的函数
        while (x>=5)
        {
            sum+=x/5;
            x=x-x/5*5;
        }
        while (x>=2)
        {
            sum+=x/2;
            x-=x/2*2;
        }
        while (x>=1)
        {
            sum+=x;
            x-=x;
        }
        cout<<sum<<endl;

    }
    return 0;
}

Problem D nefu 2090 神奇的事情发生了

❤️ 今日是二月二号,祝武汉一切安好

⭐️注意本题最后输出时要颠倒顺序
⭐️本题并不难,注意栈的用法即可

#include 
using namespace std;
stack <char>lay;
int i,j;
int k[102];
int main()
{
    ios::sync_with_stdio(false);
    char x[102];
    char y1;
    int l;//字符串长度
    while (cin>>x)
    {
        l=strlen(x);
        for(i=0;i<l;i++)
        {
            if (lay.empty())
                lay.push(x[i]);
            else if (lay.top()!=x[i])
                lay.push(x[i]);
            else
            {
                y1=lay.top();
                if (y1=='o'&&x[i]=='o')
                {
                    lay.pop();
                    if (!lay.empty()&&lay.top()=='O')//再次分情况讨论!!
                    lay.pop();
                    else lay.push('O');
                }
                if (y1=='O'&&x[i]=='O')
                    lay.pop();//若同为大写,则直接出栈即可
            }
        }
        j=0;
        while (!lay.empty())
        {
            k[++j]=lay.top();
            lay.pop();
        }
        for (i=j;i>=1;i--)
        {
            printf("%c",k[i]);
            if (i==1)
                printf("\n");
        }
    }
    return 0;
}

Problem F nefu 2078 jwMM的射箭游戏
#include 
#include 

using namespace std;

int main()
{
    int x1,x2,y1,y2;
    int r,k;
    int minn,maxn;
    while (scanf("%d %d",&x1,&y1)!=EOF)
    {
       scanf("%d %d",&x2,&y2);
       r=x2-y2;
       minn=min(x1,y1);
       maxn=max(x1,y1);
       k=0;
       for (int i=2;i<=minn;i++)
       {
           if (minn%i==0&&maxn%i==0)
           {
               if(r%i==0)
               {
                   k++;
                   break;
               }
           }
       }
       if (k==1&&r>0)
        printf("Y\n");
       else printf("N\n");
    }
    return 0;
}
Problem I nefu 2088 抹发胶
#include 
#include 
using namespace std;
int n;//人数<100
int a[110];//<1000
int b[110];
int i,j;
int tmp;//自己
int main()
{
    int t;
    cin>>t;//t组数据
    while (t--)
    {
        cin>>n;
        for(i=1; i<=n; i++)
        {
            cin>>a[i];
            //b[i]=a[i];
        }
        memset(b,0,sizeof(b));
        b[1]=0;
        for (j=2; j<=n; j++)
        {
            for (i=1; i<=j; i++)
            {
                tmp=a[j];
                if (tmp>a[i])
                {
                    b[j]++;
                }
            }
        }
        for (i=1; i<n; i++)
            printf("%d ",b[i]);
        printf("%d\n",b[i]);
    }
    return 0;
}
Problem J nefu 2085 天哥的难题

2019寒假集训新生考试 【持续更新中】_第1张图片
⭐️本题先用暴力枚举算出m=0,1,2时的个数即可得出规律
⭐️ 使用快速幂取模的模板
模板提供
此博客详细讲了快速幂取模

ll quickmod (ll a,ll b,ll c)
{
    int ret=1;
    while (b)
    {
        if (b&1)//奇数最后一位为1,b%2==1也可用,速度差不多
            ret=ret*a%c;
        a=a*a%c;
        b/=2;//向下取整
    }
    return ret;
}

ac代码

#include  
using namespace std;
int m;
long long mod=1e9+7;//注意数据类型!! 
long long  a,b;//要求的数对,都小于n!
long long quickmod (long long a,long long b)
{
    int ans=1;
    while (b)
    {
        if (b&1)//奇数最后一位为1,b%2==1也可用,速度差不多
            ans=ans*a%mod;
        a=a*a%mod;
        b/=2;//向下取整
    }
    return ans;
}
int main()
{
    long long sum;
    while (cin>>m)
    {
        sum=quickmod(3,m);
        cout<<sum<<endl;
    }
    return 0;
}

Problem L

本次比赛中最简单的一道题

#include 
#include 
using namespace std;

int main()
{

    int a[110];
    int n;
    while (cin>>n)
    {
        for (int i=0;i<n;i++)
            cin>>a[i];
        sort (a,a+n);
        printf("%d %d\n",a[n-2],a[1]);
    }
    return 0;
}

⭐️题目⭐️
吃辣条
Problem:L
Time Limit:1000ms
Memory Limit:65535K
Description
冬天悄无声息的来了。
北方人常常会选择喝酒来御寒;在无辣不欢的南方,有些人会选择吃火锅或是烤肉来取暖,也有些人会选择吃辣条来“升温”。
张家界的天气越来越冷了,贫穷小Z没有羽绒服,只好靠辣条来熬过这个冬天,可超市的辣条种数繁多,一共有n种,每种辣条都有一个价格a[i],小Z又有选择恐惧症,一直在犹豫买哪种辣条。经过一个多小时的抉择,小Z觉得自己很2,就买第二贵和第二便宜的那两种辣条吧。现在憨憨的小Z想知道第二贵和第二便宜的辣条的价格是多少,你可否帮帮憨憨的小Z呢?
Input
多组输入。
第一行输入一个n(4<=n<=100),代表超市里有n种辣条。
第二行输入n个整数ai,分别指每种辣条的价格,且每种辣条的价格都不一样。
Output
输出两个整数,分别指第二贵和第二便宜的辣条的价格。
Sample Input
5
7 6 11 150 23
4
9 8 7 6
Sample Output
23 7
8 7
Hint
多组输入
Source
善良的ljw送你的签到题

2019寒假集训新生考试—NEFU 0215

Problem A nefu 1295 机器人
#include 
using namespace std;
struct que
{
    int q1;//原先
    int q2;//改后
};
bool operator < (const que &s1,const que &s2)
{
    return s1.q2>s2.q2;
}
priority_queue<que,vector<que> >q;
int n,r,s;
long long x,xx;
int a[10];
int ant,tmp;
int main()
{
    while(cin>>n)
    {
        //cin>>n;
        for (int i=1; i<=n; i++)
        {
            ant=0;
            s=0;
            cin>>x;
            xx=x;
            while(x)
            {
                r=x%10;
                x=x/10;
                a[ant++]=r;
            }
            for(int j=0; j<ant; j++)
            {
                s=s*10+a[j];
            }
            //cout<
            q.push({xx,s});
        }
        while(q.size()>1)
        {
            que tmp=q.top();
            printf("%d ",tmp.q1);
            q.pop();
        }
        que tmp=q.top();
        printf("%d\n",tmp.q1);
        q.pop();
    }

    return 0;
}
Problem B nefu 1311 纸牌游戏
#include 
using namespace std;
int t,n;
queue<int>poker;
int tmp,r;
int main()
{
    cin>>t;
    for (int i=1;i<=t;i++)
    {
        cin>>n;
        if(n==1)
            cout<<'1'<<endl;
        else
        {
            for (int j=1;j<=n;j++)
            poker.push(j);
        while(poker.size()>1)
        {
            tmp=poker.front();
            cout<<tmp;
            if(poker.size()>2)
            cout<<',';
            poker.pop();
            r=poker.front();
            poker.pop();
            poker.push(r);
            //if(poker.size()==1)
                //break;
        }
        cout<<endl<<poker.front()<<endl;
        poker.pop();
        }
    }
    return 0;
}
Problem C nefu 2114 咸鱼连突刺
#include 
using namespace std;
typedef long long LL;
const int N=1e6+1;
bool b[N];
int prime[N];
int max1,min1;
int t,l,r;
int jud,cnt;
LL ans;
void isprime()
{
    memset(b,1,sizeof(b));
    b[0]=b[1]=0;
    for (int i=2;i<=N;i++)
    {
        if(b[i])
            prime[++cnt]=i;
        for (int j=1;j<=cnt&&prime[j]*i<=N;j++)
        {
            b[prime[j]*i]=0;
            if (i%prime[j]==0)
                break;
        }
    }
}
int main()
{
    isprime();
    cin>>t;
        for(int i=1;i<=t;i++)
        {
            jud=0;
            cin>>l>>r;
          for(int j=l;j<=r;j++)
            {
                if(b[j]==1)
                {
                    jud=1;
                    min1=j;
                    break;
                }
            }
            for(int j=r;j>=l;j--)
            {
                if(b[j]==1)
                {
                    jud=1;
                    max1=j;
                    break;
                }
            }
            if(jud==1)
                ans+=max1+min1;
        }
            printf("%lld\n",ans);
    return 0;
}
Problem D nefu 2110 库特的合并果子
#include 
using namespace std;
long long n,x;
priority_queue<long long,vector<long long>,greater<long long> >q;
long long y3,y2;
int main()
{
    //ios::sync_with_stdio(false);
    while(scanf("%lld",&n)!=EOF)
    {
        for (long long i=1;i<=n;i++)
        {
            scanf("%lld",&x);
            q.push(x);
        }
        while(q.size()>2)
        {
            y3=q.top();q.pop();
            y2=q.top();q.pop();
            q.push(y3+y2);
            printf("%lld ",y2+y3);
            /*if (q.size()>1)
                //cout<
        }
        y3=q.top();q.pop();
        y2=q.top();q.pop();

        printf("%lld\n",y2+y3);
    }
    return 0;
}
Problem E nefu 2111 库特的素数队列(1)
Problem F nefu 2112 库特的素数队列(2)
Problem G nefu 1949 库特的绳子

2019寒假集训新生考试—NEFU 0222

Problem A nefu 2122 熊熊对对碰

⭐️注意map套map的用法,相当于二维数组
⭐️大佬的博客的讲解用于借鉴 点此查看

#include 
using namespace std;
map<int,map<int,int> >q;
int n,x,y,num,ans;
int main()
{
   ios::sync_with_stdio(false);
   cin>>n;
   while(n--)
   {
       cin>>x>>y;
       q[x][y]++;//map套map相当于二维数组
   }
   for(auto i=q.begin();i!=q.end();i++)
       for(auto j=i->second.begin();j!=i->second.end();j++)
       {
           x=i->first;
           y=j->first;
           if(x==0&&y==0)
               num=q[x][y];
           else num=q[x][y]+q[-x][-y];
           if(!(num&1))
           {
               ans+=num;
               q[x][y]=0;
               q[-x][-y]=0;
           }
       }
   cout<<ans<<endl;
   return 0;
}
Problem B nefu 2120 秘籍
#include 
using namespace std;
int a[300010];
int n,k,l,r;
int sum,flag;
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>k;
    for (int i=1;i<=n;i++)
        cin>>a[i];
    sum=0;//初始化
    l=1;
    flag=0;
    for (r=1;r<=n;r++)
    {
        sum+=a[r];
        while(sum>k&&l<r)
        {
            sum=sum-a[l];
            l++;
        }
        if(sum==k)
        {
            flag=1;
            break;
        }
    }
    if(flag==1)
        cout<<l<<" "<<r;
    else
        cout<<"tiangeniupi";
    return 0;
}
Problem C nefu 2103 jwGG的签到题
Problem D nefu 2133 jwMM的疯狂A-B
#include 
using namespace std;
int n,m;
int a,b,flag;
set<int>q;
set<int>ss;
set<int>ans;
set<int>::iterator it;
int main()
{
    ios::sync_with_stdio(false);
     cin>>n>>m;
    while (n--)
    {
        cin>>a;
        q.insert(a);
    }
    while(m--)
    {
        cin>>b;
        ss.insert(b);
    }
    //set::iterator it;
    flag=0;
    for(it=q.begin();it!=q.end();it++)
    {
        if(!ss.count(*it))
        {
            ans.insert(*it);
            flag=1;//记录存在
        }
    }
    if (flag==1)
    for (it=ans.begin();it!=ans.end();it++)
        cout<<*it<<endl;
    else
        cout<<"So crazy!!!"<<endl;
    return 0;
}
Problem E
Problem F
Problem G
Problem H

你可能感兴趣的:(acm大一集训,算法,c++,c语言)