【CQ18高一暑假前挑战赛5】标程

【A:暴力】

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
int a[maxn],vis[maxn],N,M;
int main()
{
    scanf("%d%d",&N,&M);
    for(int i=1;i<=M;i++){
        scanf("%d",&a[i]);
        vis[a[i]]=1;
    }
    for(int i=1;i<=N;i++)
      if(!vis[i]) printf("%d\n",i);
    return 0;
}

【B:模拟】

#include<bits/stdc++.h>
using namespace std;
const int maxn=20010;
vector<short int>G[maxn];
int main()
{
    int N,M,x,i,j;
    scanf("%d%d",&N,&M);
    for(i=1;i<=N;i++)
      for(j=0;j<M;j++){
        scanf("%d",&x); G[i].push_back(x);
    }
    printf("%d %d\n",M,N);
    for(i=0;i<M;i++){
       for(j=1;j<=N;j++) printf("%d ",G[j][i]);
       printf("\n");
    }
    return 0;
}

【C:数位DP入门题】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=100;
int N,L,a[maxn];
ll dp[maxn][2][maxn],num[maxn][2][maxn],ans;
void divede()
{
    while(N){ a[++L]=N%10; N/=10; }
}
ll dfs(int pos,int lim,int x)
{
    if(pos==0){  num[pos][lim][x]=1; return x==1;}
    if(!lim&&dp[pos][lim][x]) return dp[pos][lim][x];
    int ups=lim?a[pos]:9;
    for(int i=0;i<=ups;i++){
        dp[pos][lim][x]+=(dfs(pos-1,lim&(i==ups),i))+(x==1?num[pos-1][lim&(i==ups)][i]:0);
        num[pos][lim][x]+=num[pos-1][lim&(i==ups)][i];
    }
    return dp[pos][lim][x];
}
int main()
{
    scanf("%d",&N);
    divede();
    for(int i=0;i<=a[L];i++) ans+=dfs(L-1,i==a[L],i);
    printf("%lld\n",ans);
    return 0;
}

【D:单调队列】

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=350010;
const int inf=1e9+7;
int a[maxn],L1[maxn],b[maxn],R1[maxn],L2[maxn],R2[maxn],q[maxn],head;
vector<int>G[maxn];
ll get(int u)
{
    int Len=G[b[u]].size(); ll res=0;
    for(int i=0;i<Len;i++){
        if(u>=G[b[u]][i]){
            ll r=min(R1[G[b[u]][i]],R2[u])-u+1;
            ll l=G[b[u]][i]-max(L2[u],L1[G[b[u]][i]])+1;
            if(r>0&&l>0) res+=l*r;
        }
        else {
            ll r=min(R2[u],R1[G[b[u]][i]])-G[b[u]][i]+1;
            ll l=u-max(L2[u],L1[G[b[u]][i]])+1;
            if(r>0&&l>0) res+=l*r;
        }
    }
    return res;
}
int main()
{
    int N,i; ll ans=0;
    scanf("%d",&N);
    for(i=1;i<=N;i++) scanf("%d",&a[i]);
    for(i=1;i<=N;i++) scanf("%d",&b[i]);
    a[0]=inf; head=1; q[head]=0;
     for(i=1;i<=N;i++){ //若有相同,只算左边第一个。
         while(head&&a[i]>a[q[head]]) head--;
         L1[i]=q[head]+1; q[++head]=i;
    }
    a[N+1]=inf; head=1; q[head]=N+1;
    for(i=N;i>=1;i--){
        while(head&&a[i]>=a[q[head]]) head--;
        R1[i]=q[head]-1; q[++head]=i;
    }
    for(i=1;i<=N;i++) G[a[i]].push_back(i);

    b[0]=inf; head=1; q[head]=0;
     for(i=1;i<=N;i++){
         while(head&&b[i]>b[q[head]]) head--;
         L2[i]=q[head]+1; q[++head]=i;
    }
    b[N+1]=inf; head=1; q[head]=N+1;
    for(i=N;i>=1;i--){
        while(head&&b[i]>=b[q[head]]) head--;
        R2[i]=q[head]-1; q[++head]=i;
    }
    for(i=1;i<=N;i++) ans+=get(i);
    printf("%lld\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/hua-dong/p/9149765.html

时间: 2024-10-02 21:34:55

【CQ18高一暑假前挑战赛5】标程的相关文章

【CQ18高一暑假前挑战赛3】标程

[A:LCM] #include<bits/stdc++.h> using namespace std; #define ll long long int main() { ll a,b,g; cin>>a>>b; g=__gcd(a,b); cout<<a/g*b<<endl; return 0; } [B:STL,用set或者queue+map都行] #include<bits/stdc++.h> using namespace

暑假前挑战赛1—— A,B题解

A - A^B Mod C 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^9) Output 输出计算结果 Sample Input 3 5 8 Sample Output 3 解题思路: 1.题目数据较大,所以计算乘方的时候直接用for或while循环会超时这里我们采用快速幂算法Ps:贴上百度百科快速幂代码 int pow(int a,int b) { i

“玲珑杯”算法比赛 Round #14题目与标程

"玲珑杯"算法比赛 Round #14By:wxh010910 Start Time:2017-05-13 16:00:00 End Time:2017-05-13 18:30:00 Refresh Time:2017-05-20 09:51:24 Public p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin:

世界上最遥远的距离莫过于:「暑假前」和「暑假后」

相信很多人开学第一天的反应都是这样的:不过一个暑假,怎么一切都变得陌生了? 整个学院,焕然一新,清一色的白墙,换上了各种小清新的鹅黄.淡粉,俨然进入了「童话世界」: 校园里挂满了各种欢迎新生的创意横幅,「防火.防盗.防学长」之类的调侃,随处可见: 隔壁班那个心仪的男孩,依然「耀眼」,只是一个暑假后,他的身边俨然多了一个十指相扣的「她」: 就连同一寝室那些曾经最为亲近的人,也变得倍感「陌生」. 分分钟让人徒添一种感慨:世界上最遥远的距离莫过于:「暑假前」和「暑假后」. 人与人之间的差距,是从假期拉

整数分解的标程

经常用到的一个小技巧,将整数分解成一个个小数如:234分解成2 3 4 因为自己总是忘记,整理成标程,以后可以直接套用 1 int fenjie(int x)//分解整数x后求和 2 { 3 int sum=0; 4 while(x) 5 { 6 sum+=x%10; 7 x/=10; //割掉最后位 8 } 9 return sum; 10 }

西北工业大学2015年计算机学院考研机试 题目+标程(完整版)

A 求最小数(Output the minimum) 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 每次给定3个数(均可用int表示),要求找出3个数里的最小的一个,并输出最小的数.Input three integers and output the minimum 输入 a b c 三个数用空格隔开Input three integers . 输出 a b c中最小的一个数Output the minimum . 输入样例 5 3 98 输出样例 3 1 #inc

王学长的LCT标程

善良的王学长竟然亲自打了一遍QAQ好感动QAQ 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<queue> 6 #include<cstring> 7 #define PAU putchar(' ') 8 #define ENT putchar('\n') 9 using namespace std;

不忘初心,方得始终——NOIP2016前的感悟

不忘初心,方得始终 袛园精舍钟声响,奏诸世事本无常.沙罗双树失花色,盛者转衰如沧桑.骄者难久,恰如春宵一梦.猛者遂灭,好似风前之尘.    --题记   人生中最令人恐惧的恐怕就是选择了,现在的你拥有选择的权利,而未来的你却没有后悔的权利.命数仿佛大海般起伏不定,难以预料.机缘巧合之下,我选择了OI的道路,我的人生也必会产生翻天覆地的变化.2016年11月11日,月光如水,站在窗前,仰望浩瀚的星辰,我不禁反问自己,我的选择真的正确吗?   自中考失利,无缘郑外,我的心情一直很低落,直到加入OI的

NYOJ 20 吝啬的国度 【BFS+链式前向星建图,Vector建图】

吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路). 输入 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组 每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000