2018 ACM 网络选拔赛 南京赛区

A. An Olympian Math Problem

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <time.h>
 6 #include <string>
 7 #include <set>
 8 #include <map>
 9 #include <list>
10 #include <stack>
11 #include <queue>
12 #include <vector>
13 #include <bitset>
14 #include <ext/rope>
15 #include <algorithm>
16 #include <iostream>
17 using namespace std;
18 #define ll long long
19 #define minv 1e-6
20 #define inf 1e9
21 #define pi 3.1415926536
22 #define nl 2.7182818284
23 const ll mod=1e9+7;//998244353
24 const int maxn=1e5+10;
25
26
27 int main()
28 {
29     int t;
30     ll n;
31     scanf("%d",&t);
32     while (t--)
33     {
34         scanf("%lld",&n);
35         printf("%lld\n",n-1);
36     }
37     return 0;
38 }

C. GDY

  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cmath>
  4 #include <cstring>
  5 #include <time.h>
  6 #include <string>
  7 #include <set>
  8 #include <map>
  9 #include <list>
 10 #include <stack>
 11 #include <queue>
 12 #include <vector>
 13 #include <bitset>
 14 #include <ext/rope>
 15 #include <algorithm>
 16 #include <iostream>
 17 using namespace std;
 18 #define ll long long
 19 #define minv 1e-6
 20 #define inf 1e9
 21 #define pi 3.1415926536
 22 #define nl 2.7182818284
 23 const ll mod=1e9+7;//998244353
 24 const int maxn=2e2+10;
 25 const int maxm=2e4;
 26
 27 int s[maxm],a[maxn][maxm],g[maxn];
 28 int value[14]={0,12,13,1,2,3,4,5,6,7,8,9,10,11};
 29
 30 int cmp(int x,int y)
 31 {
 32     return value[x]>value[y];
 33 }
 34
 35 int main()
 36 {
 37     int t,T,n,m,num,i,j,sum;
 38     int x,y,z;
 39     scanf("%d",&t);
 40     for (T=1;T<=t;T++)
 41     {
 42         memset(g,0,sizeof(g));
 43
 44         scanf("%d%d",&n,&m);
 45         for (i=0;i<m;i++)
 46             scanf("%d",&s[i]);
 47         num=0;
 48         for (i=0;i<n;i++)
 49         {
 50             for (j=0;j<5;j++)
 51             {
 52                 if (num==m)
 53                     break;
 54                 a[i][j]=s[num++];
 55             }
 56             sort(a[i],a[i]+j,cmp);
 57             g[i]=j;
 58         }
 59
 60         z=a[0][g[0]-1];//previous number
 61         g[0]--;
 62         y=1;//has y persons
 63         x=1;//pos
 64         while (1)
 65         {
 66             for (i=g[x]-1;i>=0;i--)
 67                 if (value[z]+1==value[a[x][i]] || (a[x][i]==2 && z!=2))
 68                     break;
 69
 70             if (i!=-1)
 71             {
 72                 z=a[x][i];
 73                 a[x][i]=0;
 74                 sort(a[x],a[x]+g[x],cmp);
 75                 g[x]--;
 76                 if (g[x]==0)
 77                     break;
 78                 y=1;
 79             }
 80             else if (y!=n-1)
 81                 y++;
 82             else
 83             {
 84                 x=(x+1)%n;
 85                 for (i=x;;i=(i+1)%n)
 86                 {
 87                     if (num==m)
 88                         break;
 89                     else
 90                     {
 91                         a[i][g[i]++]=s[num++];
 92                         sort(a[i],a[i]+g[i],cmp);
 93                     }
 94                     if (i==(x-1+n)%n)
 95                         break;
 96                 }
 97
 98                 z=a[x][g[x]-1];
 99                 g[x]--;
100                 if (g[x]==0)
101                     break;
102                 y=1;
103             }
104
105             x=(x+1)%n;
106         }
107         printf("Case #%d:\n",T);
108         for (i=0;i<n;i++)
109             if (i==x)
110                 printf("Winner\n");
111             else
112             {
113                 sum=0;
114                 for (j=0;j<g[i];j++)
115                     sum+=a[i][j];
116                 printf("%d\n",sum);
117             }
118     }
119     return 0;
120 }
121 /*
122 10
123 2 6
124 3 5 7 9 11 4
125
126 3 20
127 2 2 2 2 2 2 2 2 2 2
128 2 2 2 2 2 2 2 2 2 2
129
130 3 19
131 2 2 2 2 2 2 2 2 2 2
132 2 2 2 2 2 2 2 2 2
133
134 3 20
135 3 2 2 2 2 2 2 2 2 2 2
136 2 2 2 2 2 2 2 2 2
137
138 2 10
139 3 4 5 6 7 2 3 4 5 6
140
141 3 15
142 3 4 5 6 7 12 12 12 12 12 13 13 13 13 13
143
144 3 11
145 1 2 3 4 5 6 7 8 9 10 11
146
147 3 13
148 1 2 3 4 5 6 7 8 9 10 11 12 13
149
150 1
151 3 17
152 1 2 3 4 5 6 7 8 9 10 11 12 13 12 11 10 9
153
154 */

E. AC Challenge

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf -1e18
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+7;//998244353
const int maxn=1e5+10;

ll f[1<<20];

struct node
{
    ll value;
    int pos,t;
};

struct cmp1
{
    bool operator() (node a,node b)
    {
        return a.value>b.value;
    }
};

//priority_queue<node>st;
priority_queue<node,vector<node>,cmp1>st;
int er[21],a[21],b[21],v[21];

int main()
{
    int n,m,s,i,j,value,pos,t;
    ll r=0,rr;
    for (i=0;i<20;i++)
        er[i]=(1<<i);

    scanf("%d",&n);
    for (i=0;i<(1<<n);i++)
            f[i]=inf;

    for (i=0;i<n;i++)
    {
        scanf("%d%d%d",&a[i],&b[i],&m);
        v[i]=0;
        while (m--)
        {
            scanf("%d",&s);
            v[i]+=(er[s-1]);
        }
        if (v[i]==0)
        {
            f[er[i]]=a[i]+b[i];
            st.push({a[i]+b[i],er[i],2});
            r=max(r,(ll)a[i]+b[i]);
        }
    }

    while (!st.empty())
    {
        value=st.top().value;
        pos=st.top().pos;
        t=st.top().t;
        st.pop();
        for (i=0;i<n;i++)
            if ((pos & er[i])==0 && (pos & v[i])==v[i] && value+1ll*t*a[i]+b[i]>f[pos|er[i]])
            {
                rr=value+1ll*t*a[i]+b[i];
                f[pos|er[i]]=rr;
                r=max(r,rr);
                st.push({rr,pos|er[i],t+1});
            }
    }
    printf("%lld",r);
    return 0;
}
/*
3
1 2 0
1 5 0
8 1 0
*/

G. Lpl and Energy-saving Lamps

  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cmath>
  4 #include <cstring>
  5 #include <time.h>
  6 #include <string>
  7 #include <set>
  8 #include <map>
  9 #include <list>
 10 #include <stack>
 11 #include <queue>
 12 #include <vector>
 13 #include <bitset>
 14 #include <ext/rope>
 15 #include <algorithm>
 16 #include <iostream>
 17 using namespace std;
 18 #define ll long long
 19 #define minv 1e-6
 20 #define inf 1e18
 21 #define pi 3.1415926536
 22 #define nl 2.7182818284
 23 const ll mod=1e9+7;//998244353
 24 const int maxn=1e5+10;
 25
 26 struct node
 27 {
 28     int x,y;
 29 }f[maxn],r[maxn];
 30
 31 int tag[maxn<<2],a[maxn],x,y;
 32
 33 int cmp(node a,node b)
 34 {
 35     return a.x<b.x;
 36 }
 37
 38 void build(int index,int l,int r)
 39 {
 40     if (l==r)
 41         scanf("%d",&tag[index]);
 42     else
 43     {
 44         int m=(l+r)>>1;
 45         build(index<<1,l,m);
 46         build(index<<1|1,m+1,r);
 47         tag[index]=min(tag[index<<1],tag[index<<1|1]);
 48     }
 49 }
 50
 51 int query(int index,int l,int r,int v)
 52 {
 53     if (l==r)
 54     {
 55         if (tag[index]>v)
 56             return 0;
 57
 58         x++;
 59         y-=tag[index];
 60         tag[index]=inf;
 61         return l;
 62     }
 63     else
 64     {
 65         int m=(l+r)>>1,z;
 66         if (tag[index<<1]<=v)
 67             z=query(index<<1,l,m,v);
 68
 69         else
 70             z=query(index<<1|1,m+1,r,v);
 71         tag[index]=min(tag[index<<1],tag[index<<1|1]);
 72         return z;
 73     }
 74 }
 75
 76 int main()
 77 {
 78     int n,m,q,Q,d,index,i,j;
 79     scanf("%d%d",&n,&m);
 80     build(1,1,n);
 81
 82     scanf("%d",&q);
 83     for (Q=1;Q<=q;Q++)
 84     {
 85         scanf("%d",&d);
 86         f[Q].x=d;
 87         f[Q].y=Q;
 88     }
 89     sort(f+1,f+q+1,cmp);
 90
 91     index=1;
 92     x=0;
 93     y=0;
 94     for (i=1;i<=f[q].x;i++)
 95     {
 96         y+=m;
 97         j=1;
 98         while (j)
 99             j=query(1,1,n,y);
100
101         while (f[index].x==i)
102         {
103             r[f[index].y]={x,y};
104             index++;
105         }
106     }
107
108     for (i=1;i<=q;i++)
109         printf("%d %d\n",r[i].x,r[i].y);
110     return 0;
111 }

J. Sum

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <time.h>
 6 #include <string>
 7 #include <set>
 8 #include <map>
 9 #include <list>
10 #include <stack>
11 #include <queue>
12 #include <vector>
13 #include <bitset>
14 #include <ext/rope>
15 #include <algorithm>
16 #include <iostream>
17 using namespace std;
18 #define ll long long
19 #define minv 1e-6
20 #define inf 1e9
21 #define pi 3.1415926536
22 #define nl 2.7182818284
23 const ll mod=1e9+7;//998244353
24 const int maxn=2e7+10;
25
26 int zhi[maxn],f[maxn];
27 bool vis[maxn],v[maxn];
28
29 int main()
30 {
31     int t,i,j,k,x=0,y=0,value=2e7;
32     ll n,sum;
33     memset(vis,0,sizeof(vis));
34     memset(v,0,sizeof(v));
35     for (i=2;i<=value;i++)
36     {
37         if (!vis[i])
38         {
39             x++;
40             zhi[x]=i;
41         }
42         for (j=1;j<=x;j++)
43         {
44             k=i*zhi[j];
45             if (k>value)
46                 break;
47             vis[k]=1;
48             v[k]=v[i];
49             if (i%zhi[j]==0)
50             {
51                 v[k]=1;
52                 break;
53             }
54         }
55     }
56     for (i=1;i<=value;i++)
57         if (!v[i])
58         {
59             y++;
60             f[y]=i;
61         }
62
63 //    for (i=1;i<=100;i++)
64 //        printf("%d ",f[i]);
65
66     scanf("%d",&t);
67     f[0]=0;
68     while (t--)
69     {
70         scanf("%lld",&n);
71         sum=0;
72         j=y;
73         for (i=1;i<=y;i++)
74         {
75             while (1ll*f[i]*f[j]>n)
76                 j--;
77             sum+=j;
78         }
79         printf("%lld\n",sum);
80     }
81     return 0;
82 }

L. Magical Girl Haze

  1 /*
  2 图问题:
  3 spfa容易被卡时间复杂度
  4
  5 而dijkstra是贪心,不会被卡
  6 */
  7 #include <cstdio>
  8 #include <cstdlib>
  9 #include <cmath>
 10 #include <cstring>
 11 #include <time.h>
 12 #include <string>
 13 #include <set>
 14 #include <map>
 15 #include <list>
 16 #include <stack>
 17 #include <queue>
 18 #include <vector>
 19 #include <bitset>
 20 #include <ext/rope>
 21 #include <algorithm>
 22 #include <iostream>
 23 using namespace std;
 24 #define ll long long
 25 #define minv 1e-6
 26 #define inf 1e18
 27 #define pi 3.1415926536
 28 #define nl 2.7182818284
 29 const ll mod=1e9+7;//998244353
 30 const int maxn=1e5+10;
 31
 32 struct rec
 33 {
 34     int d,len;
 35     rec *to;
 36 }*e[maxn];
 37
 38 struct node
 39 {
 40     ll dist;
 41     int k,d;
 42 };
 43
 44 struct cmp1
 45 {
 46     bool operator() (node a,node b)
 47     {
 48         if (a.dist==b.dist)
 49             return a.k>b.k;
 50         else
 51             return a.dist>b.dist;
 52     }
 53 };
 54
 55 priority_queue<node,vector<node>,cmp1>st;
 56
 57 ll f[maxn][12];
 58
 59 int main()
 60 {
 61     rec *p;
 62     int t,n,m,k,i,j,d,kk,dd,x,y,z;
 63     ll dist,r;
 64     scanf("%d",&t);
 65     while (t--)
 66     {
 67         scanf("%d%d%d",&n,&m,&k);
 68         for (i=1;i<=n;i++)
 69             e[i]=NULL;
 70         while (m--)
 71         {
 72             scanf("%d%d%d",&x,&y,&z);
 73             p=(rec*) malloc (sizeof(rec));
 74             p->d=y;
 75             p->len=z;
 76             p->to=e[x];
 77             e[x]=p;
 78         }
 79         for (i=1;i<=n;i++)
 80             for (j=0;j<=k;j++)
 81                 f[i][j]=inf;
 82         for (j=0;j<=k;j++)
 83         {
 84             f[1][j]=0;
 85             st.push({0,j,1});
 86         }
 87         //f[i][j]作为一个状态,100000*10
 88         while (!st.empty())
 89         {
 90             dist=st.top().dist;
 91             d=st.top().d;
 92             kk=st.top().k;
 93             st.pop();
 94             p=e[d];
 95             while (p)
 96             {
 97                 dd=p->d;
 98                 if (f[dd][kk]>dist+p->len)
 99                 {
100                     f[dd][kk]=dist+p->len;
101                     st.push({f[dd][kk],kk,dd});
102                 }
103                 if (kk!=k && f[dd][kk+1]>dist)
104                 {
105                     f[dd][kk+1]=dist;
106                     st.push({f[dd][kk+1],kk+1,dd});
107                 }
108                 p=p->to;
109             }
110         }
111         r=inf;
112         for (j=0;j<=k;j++)
113             r=min(r,f[n][j]);
114         printf("%lld\n",r);
115     }
116     return 0;
117 }

原文地址:https://www.cnblogs.com/cmyg/p/9668256.html

时间: 2024-11-10 18:58:28

2018 ACM 网络选拔赛 南京赛区的相关文章

2018 ACM 网络选拔赛 青岛赛区

一些题目的代码被网站吞了-- Problem B. Red Black Tree http://acm.zju.edu.cn/onlinejudge/searchProblem.do?contestId=1&titlefrom=0&authorfrom=0&sourcefrom=0&query=The+2018+ACM-ICPC+Asia+Qingdao+Regional+Contest%2C+Online http://acm.zju.edu.cn/pcpst/index

2018 ACM 网络选拔赛 沈阳赛区

B. Call of Accepted 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include <cstring> 5 #include <time.h> 6 #include <string> 7 #include <set> 8 #include <map> 9 #include <list> 10 #incl

ACM-ICPC 2018 南京赛区网络预赛 E题

ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answer of all of these problems. However, he can submit ii-th problem if and only if he has s

ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树

目录 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 题意 思路 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 During tea-drinking, princess, amongst other things, asked why has such a good-natured and cute Dragon imprisoned Lpl in the

ACM-ICPC 2018 南京赛区网络预赛 J.Sum

Sum A square-free integer is an integer which is indivisible by any square number except 11. For example, 6 = 2 \cdot 36=2⋅3 is square-free, but 12 = 2^2 \cdot 312=22⋅3 is not, because 2^222 is a square number. Some integers could be decomposed into

ACM-ICPC 2018南京赛区网络预选赛

A题:An Olympian Math Problem 可以发现最终的答案就是n-1 1 #include <iostream> 2 #include<bits/stdc++.h> 3 using namespace std; 4 typedef long long ll; 5 int main() 6 { 7 int t; 8 ll n; 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%lld&

ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze

262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v(1≤u,v≤n). Every road has a distance c_ici?. Haze is a Magical Girl that lives in City 11, she can choose no more than KK roads and make their distances

计蒜客 ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem-数学公式题

A. An Olympian Math Problem 54.28% 1000ms 65536K Alice, a student of grade 66, is thinking about an Olympian Math problem, but she feels so despair that she cries. And her classmate, Bob, has no idea about the problem. Thus he wants you to help him.

2018中国大学生程序设计竞赛 - 网络选拔赛 1010 YJJ&#39;s Salesman 【离散化+树状数组维护区间最大值】

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6447 YJJ's Salesman Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 919    Accepted Submission(s): 290 Problem Description YJJ is a salesman who h