zoukankan      html  css  js  c++  java
  • codechef cook 103 div2

    第一次打codechef。。。不太会用这oj。

    A:

     1 #include <bits/stdc++.h>
     2 #define mk(a,b) make_pair(a,b)
     3 #define pii pair<int,int>
     4 using namespace std;
     5 inline int read() {
     6     int X=0,w=1; char c=getchar();
     7     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     8     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     9     return X*w;
    10 }
    11 typedef long long ll;
    12 const int N = 1e5+5;
    13 int t,n,b,p,w,h;
    14 int main(){
    15     t=read();
    16     while (t--){
    17         int ans=-1;
    18         n=read();b=read();
    19         while (n--){
    20             w=read();h=read();p=read();
    21             if(p<=b){
    22                 ans=max(ans,w*h);
    23             }
    24         }
    25         if(ans==-1)
    26             printf("no tablet
    ");
    27         else
    28             printf("%d
    ",ans);
    29     }
    30 }
    View Code

    B:

     1 #include <bits/stdc++.h>
     2 #define mk(a,b) make_pair(a,b)
     3 #define pii pair<int,int>
     4 using namespace std;
     5 inline int read() {
     6     int X=0,w=1; char c=getchar();
     7     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     8     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     9     return X*w;
    10 }
    11 typedef long long ll;
    12 const int N = 1e5+5;
    13 int t,n,a[N];
    14 int main(){
    15     t=read();
    16     while (t--){
    17         n=read();
    18         for(int i=1;i<=n;i++)a[i]=read();
    19         sort(a+1,a+1+n);
    20         int ans=0;
    21         for(int i=1;i<=n;i++){
    22             if(ans<a[i])
    23                 break;
    24             else{
    25                 ans++;
    26             }
    27         }
    28         printf("%d
    ",ans);
    29     }
    30 }
    View Code

    C:找一个字符串的前缀,使得这个前缀在字符串里出现次数最多,如果一样多,找最长的前缀,怎么找哇。|S|<=1e6,只包含小写字母

    做法很多,说说我的。 首先首字母确定了,最多的出现次数也确定了,保存每个首字母的后继首字母,二分长度。

     1 #include <bits/stdc++.h>
     2 #define mk(a,b) make_pair(a,b)
     3 #define pii pair<int,int>
     4 using namespace std;
     5 inline int read() {
     6     int X=0,w=1; char c=getchar();
     7     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     8     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     9     return X*w;
    10 }
    11 typedef long long ll;
    12 const int N = 1e5+5;
    13 int t,n;
    14 char s[N];
    15 int nxt[N];
    16 int check(int len){
    17     int tmp=1;
    18     int st=0;
    19     while (st<len)
    20         st=nxt[st];
    21     for(;st<n;st=nxt[st]){
    22         bool f=1;
    23         for(int i=0;i<len;i++){
    24             if(s[st+i]!=s[i]){
    25                 f=0;
    26                 break;
    27             }
    28         }
    29         if(f) tmp++;
    30     }
    31     return tmp;
    32 }
    33 int main() {
    34     t = read();
    35     while (t--) {
    36         memset(nxt,0, sizeof(nxt));
    37         n=read();scanf("%s",&s);
    38         int mx=0;
    39         int pre=0;
    40         for (int i=0;i<n;i++){
    41             if(s[i]==s[0]){
    42                 mx++;
    43                 nxt[pre]=i;
    44                 pre=i;
    45             }
    46         }
    47         nxt[pre]=n;
    48         int l=1,r=n;
    49         while (l<=r){
    50             int mid=l+r>>1;
    51             if(check(mid)==mx){
    52                 l=mid+1;
    53             } else{
    54                 r=mid-1;
    55             }
    56         }
    57         for(int i=0;i<r;i++)
    58             printf("%c",s[i]);
    59         printf("
    ");
    60     }
    61 }
    View Code

    D:感觉比C简单多了。。。怎么印度友人也不太擅长这种沙比题啊。

    就求个前缀,然后枚举删掉的是哪一步操作。。。就没了啊。。。

     1 #include <bits/stdc++.h>
     2 #define mk(a,b) make_pair(a,b)
     3 #define pii pair<int,int>
     4 using namespace std;
     5 inline int read() {
     6     int X=0,w=1; char c=getchar();
     7     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     8     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     9     return X*w;
    10 }
    11 typedef long long ll;
    12 const int N = 1e5+5;
    13 const int M = 1e5;
    14 int t,n,k,l[N],r[N];
    15 int pre[N],a1[N],a2[N];
    16 int main(){
    17     t=read();
    18     while (t--){
    19         n=read();
    20         k=read();
    21         memset(pre,0, sizeof(pre));
    22         memset(a1,0, sizeof(a1));
    23         memset(a2,0, sizeof(a2));
    24         for(int i=1;i<=n;i++){
    25             l[i]=read();r[i]=read();
    26             pre[l[i]]++;
    27             pre[r[i]+1]--;
    28         }
    29         for(int i=1;i<=M;i++){
    30             pre[i]+=pre[i-1];
    31             if(pre[i]==k)
    32                 a1[i]++;
    33             if(pre[i]==k+1)
    34                 a2[i]++;
    35         }
    36         for(int i=1;i<=M;i++){
    37             a1[i]+=a1[i-1];
    38             a2[i]+=a2[i-1];
    39         }
    40         int ans=0;
    41         for(int i=1;i<=n;i++){
    42             ans=max(ans,a1[M]-a1[r[i]]+a1[l[i]-1]+a2[r[i]]-a2[l[i]-1]);
    43         }
    44         printf("%d
    ",ans);
    45     }
    46 }
    View Code

    E:原根+一些神奇的战法,没做出来。

    首先判f是不是0

    非零的话求原根然后求出来每个数是原根的几次幂,

    这个时候可以dp,但是我不会。

    也可以不dp,我也不会。

    就是我们随便选一个可以留下的数,那么这个数和他的倍数们都可以留下。然后更新ans。

    代码抄别人的。我也看不懂。  我正在努力试图看懂。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 inline int read() {
     4     int X=0,w=1; char c=getchar();
     5     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     6     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     7     return X*w;
     8 }
     9 typedef long long ll;
    10 int mod;
    11 int qpow(int a,int x){
    12     int res=1;
    13     while (x){
    14         if(x&1)
    15             res=1ll*res*a%mod;
    16         a=1ll*a*a%mod;
    17         x/=2;
    18     }
    19     return res;
    20 }
    21 const int N = 1e5+5;
    22 int t,n,f,p[N],st[N<<1];
    23 vector<int> v;//
    24 int root(){
    25     v.clear();
    26     int tmp=mod-1;
    27     for(int i=2;i*i<=tmp;i++){
    28         if(tmp%i==0){
    29             v.push_back(i);
    30             while (tmp%i==0)
    31                 tmp/=i;
    32         }
    33     }
    34     if(tmp!=1)v.push_back(tmp);
    35     for(int i=2;i<=mod-1;i++){
    36         bool f=1;
    37         for(auto c:v) {
    38             if (qpow(i, (mod - 1) / c) == 1) {
    39                 f=0;
    40                 break;
    41             }
    42         }
    43         if(f)
    44             return i;
    45     }
    46     return -1;
    47 }
    48 int main(){
    49     t=read();
    50     while (t--){
    51         n=read();
    52         mod=read();
    53         f=read();
    54         for(int i=1;i<=n;i++)
    55             p[i]=read();
    56         if(f==0){
    57             int ans=0;
    58             for(int i=1;i<=n;i++)
    59                 ans+=(p[i]==0);
    60             printf("%d
    ",ans);
    61         } else{
    62             int g=root();
    63             for(int i=0,cur=1;i<mod-1;i++,cur=cur*g%mod){
    64                 st[cur]=i;
    65             }
    66             int ans=n;
    67             for(int i=2;i<=mod-1;i++){
    68                 if(st[f]%i==0)continue;
    69                 if((mod-1)%i)continue;
    70                 int tmp=0;
    71                 for(int j=1;j<=n;j++){
    72                     if(p[j]==0||st[p[j]]%i==0)continue;
    73                     tmp++;
    74                 }
    75                 ans=min(ans,tmp);
    76             }
    77             printf("%d
    ",ans);
    78         }
    79     }
    80 }
    View Code
  • 相关阅读:
    通用二进制格式安装、编译安装过程(以mysql为例)
    linux:网络
    深圳:软通-运维
    深圳:软通-python
    linux:用户管理
    linux:vim
    深圳:卡莱特-售前/售后服务
    linux:基本指令
    linux:安装
    电脑:磁盘扩容
  • 原文地址:https://www.cnblogs.com/MXang/p/10394712.html
Copyright © 2011-2022 走看看