zoukankan      html  css  js  c++  java
  • Codeforces Round #460 (Div. 2)

    最后把记忆化搜索乱搞的点给写串了,又炸裂了

    但是因为馒神操作了一番 避免了掉rating

    T1 T2 T3 sb题,随便搞一搞50分钟过

      1 // T1:
      2 #include<iostream>
      3 #include<cstdio>
      4 #include<cstring>
      5 #include<cstdlib>
      6 #include<cmath>
      7 #include<algorithm>
      8 #include<queue>
      9 #include<vector>
     10 #include<map>
     11 #define inf 2139062143
     12 #define ll long long
     13 #define MAXN
     14 #define MOD
     15 using namespace std;
     16 inline int read()
     17 {
     18     int x=0,f=1;char ch=getchar();
     19     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
     20     while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
     21     return x*f;
     22 }
     23 int n,m;
     24 double a,b,t;
     25 int main()
     26 {
     27     n=read(),m=read(),t=1000.0;
     28     for(int i=1;i<=n;i++) {scanf("%lf%lf",&a,&b);t=min(t,a/b);} 
     29     printf("%.8lf",t*m);
     30 }
     31 // T2:
     32 #include<iostream>
     33 #include<cstdio>
     34 #include<cstring>
     35 #include<cstdlib>
     36 #include<cmath>
     37 #include<algorithm>
     38 #include<queue>
     39 #include<vector>
     40 #include<map>
     41 #define inf 2139062143
     42 #define ll long long
     43 #define MAXN
     44 #define MOD
     45 using namespace std;
     46 inline int read()
     47 {
     48     int x=0,f=1;char ch=getchar();
     49     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
     50     while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
     51     return x*f;
     52 }
     53 int k;
     54 int check(int x)
     55 {
     56     int res=0;
     57     while(x) res+=x%10,x/=10;
     58     return res==10;
     59 }
     60 int main()
     61 {
     62     k=read();
     63     int i=19;
     64     while(k)
     65     {
     66         if(check(i)) k--;
     67         i++;
     68     }
     69     printf("%d",i-1);
     70 }
     71 // T3:
     72 #include<iostream>
     73 #include<cstdio>
     74 #include<cstring>
     75 #include<cstdlib>
     76 #include<cmath>
     77 #include<algorithm>
     78 #include<queue>
     79 #include<vector>
     80 #include<map>
     81 #define inf 2139062143
     82 #define ll long long
     83 #define MAXN
     84 #define MOD
     85 using namespace std;
     86 inline int read()
     87 {
     88     int x=0,f=1;char ch=getchar();
     89     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
     90     while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
     91     return x*f;
     92 }
     93 int n,m,k,ans,tmp;
     94 char mp[2010][2010];
     95 int main()
     96 {
     97     n=read(),m=read(),k=read();
     98     for(int i=0;i<n;i++) scanf("%s",mp[i]);
     99     for(int i=0;i<n;i++)
    100     {
    101         int j=0;
    102         while(j<m)
    103         {
    104             tmp=j;
    105             while(mp[i][j]=='.'&&j<m) j++;
    106             ans+=max(0,j-tmp-k+1);
    107             while(mp[i][j]!='.'&&j<m) j++;
    108         }
    109     }
    110     for(int j=0;j<m;j++)
    111     {
    112         int i=0;
    113         while(i<n)
    114         {
    115             tmp=i;
    116             while(mp[i][j]=='.'&&i<n) i++;
    117             ans+=max(0,i-tmp-k+1);
    118             while(mp[i][j]!='.'&&i<n) i++;
    119         }
    120     }
    121     if(k==1) ans/=2;
    122     printf("%d",ans);
    123 }
    View Code

    T4: 

    一个有向图 点上有字母

    在图上找一条路径 使路径上经过的点上出现次数最多字母的出现次数最大

    思路:

    设一个dp数组 dp i j 表示第i个点 j字母的个数

    然后边拓扑边转移

    就搞出来了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<map>
    10 #define inf 2139062143
    11 #define ll long long
    12 #define MAXN 301010
    13 using namespace std;
    14 inline int read()
    15 {
    16     int x=0,f=1;char ch=getchar();
    17     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    18     while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
    19     return x*f;
    20 }
    21 int n,fst[MAXN],nxt[MAXN<<1],to[MAXN<<1],cnt,m,val[MAXN],f[MAXN][30],ind[MAXN],ans,tot;
    22 void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v,ind[v]++;}
    23 int main()
    24 {
    25     n=read(),m=read();int a,b;
    26     char ch[MAXN];
    27     scanf("%s",ch);
    28     for(int i=0;i<n;i++) val[i+1]=ch[i]-'a'+1;
    29     for(int i=1;i<=m;i++) {a=read(),b=read();add(a,b);if(a==b) {puts("-1");return 0;}}
    30     queue <int> q;
    31     for(int i=1;i<=n;i++) {f[i][val[i]]=1;if(!ind[i]) q.push(i);}
    32     int x;
    33     while(!q.empty())
    34     {
    35         x=q.front();q.pop();
    36         tot++;
    37         for(int i=fst[x];i;i=nxt[i])
    38         {
    39             ind[to[i]]--;
    40             if(!ind[to[i]]) q.push(to[i]);
    41             for(int j=1;j<=26;j++)
    42             {
    43                 if(f[to[i]][j]<f[x][j]&&j!=val[to[i]]) f[to[i]][j]=f[x][j],ans=max(ans,f[to[i]][j]);
    44                 if(f[to[i]][j]<f[x][j]+1&&j==val[to[i]]) f[to[i]][j]=f[x][j]+1,ans=max(ans,f[to[i]][j]);
    45             }
    46         }
    47     }
    48     if(tot!=n) {puts("-1");return 0;}
    49     printf("%d",ans);
    50 }
    View Code

     T5:

    求一个正整数n<=x 使 

     

    思路:

    通过题解的打表

    然后可以枚举j 可以知道 b·a^(-j)  和 j-i 对p同余

    然后就求一下逆元搞一下 求一下i 就行了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<map>
    10 #define inf 2139062143
    11 #define ll long long
    12 #define MAXN 1001001
    13 using namespace std;
    14 inline ll read()
    15 {
    16     ll x=0,f=1;char ch=getchar();
    17     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    18     while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
    19     return x*f;
    20 }
    21 ll inv[MAXN],a,b,p,x,tmp=1,ans;
    22 int main()
    23 {
    24     a=read(),b=read(),p=read(),x=read(),inv[1]=1;
    25     for(ll i=2;i<p;i++) inv[i]=(p-p/i)*inv[p%i]%p;
    26     for(ll i=0;i<p-1;i++,(tmp*=a)%=p)
    27         ans+=(x-((i+p-b*inv[tmp]%p)%p*(p-1)+i)+p*(p-1))/p/(p-1);
    28     printf("%I64d",ans);
    29 }
    View Code
  • 相关阅读:
    git 回滚到某个历史版本
    java值传递与引用传递
    Spring的事务管理
    MySql安装详细图解 以及卸载不干净解决方法
    如果你决定要出发,那么旅行中最困难的部分已经结束,出发吧!
    微信小程序总是提醒安装X5内核
    使用vuerouter实现返回
    手机上测试
    H5移动端知识点总结
    微信小程序授权问题
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/8397738.html
Copyright © 2011-2022 走看看