zoukankan      html  css  js  c++  java
  • [NOIP2014] 普及组

    珠心算测验

    模拟。

    将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数。

     1 /*by SilverN*/
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 const int mxn=20010;
     9 int read(){
    10     int x=0,f=1;char ch=getchar();
    11     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    12     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    13     return x*f;
    14 }
    15 int n;
    16 int a[mxn];
    17 int cnt[mxn];
    18 int main(){
    19     int i,j;
    20     n=read();
    21     for(i=1;i<=n;i++){
    22         a[i]=read();
    23     }
    24     for(i=1;i<n;i++)
    25      for(j=i+1;j<=n;j++){
    26          cnt[a[i]+a[j]]++;
    27      }
    28     int res=0;
    29     for(i=1;i<=n;i++){
    30         if(cnt[a[i]])res++;
    31     }
    32     cout<<res<<endl;
    33     return 0;
    34 }
    珠心算测验

    比例简化

    暴力。

    因为L<=100,所以分子和分母都从1循环到100,暴力判断即可。

     1 /*by SilverN*/
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 int read(){
     9     int x=0,f=1;char ch=getchar();
    10     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 int gcd(int a,int b){
    15     if(!b)return a;
    16     return gcd(b,a%b);
    17 }
    18 int a,b,L;
    19 int ra=100,rb=1;
    20 int main(){
    21     int i,j;
    22     a=read();b=read();L=read();
    23     for(i=1;i<=L;i++)
    24      for(j=1;j<=L;j++){
    25          if(gcd(i,j)!=1)continue;
    26          if(i*b>=j*a && i*rb<j*ra){
    27              ra=i;
    28              rb=j;
    29          }
    30      }
    31     printf("%d %d
    ",ra,rb);
    32     return 0;
    33 }
    比例简化

    螺旋矩阵

    O(n^2)循环会超时。

    可以计算出最外围一圈数的个数,每次拆掉一圈数,到了目标数所在的圈再暴力查找。

     1 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 int n;
    10 int main(){
    11     int i,j;
    12     cin>>n>>i>>j;
    13     long long ans=0;
    14     int eg=min(min(n-i,i-1),min(n-j,j-1));
    15     for(int k=0;k<eg;++k)ans+=(n-2*k)*4-4;
    16     i-=eg;j-=eg;n-=2*eg;
    17     if(i==1)ans+=j;
    18     else if(i==n)ans+=2*(n-1)+n-j+1;
    19     else if(j==1)ans+=3*(n-1)+n-i+1;
    20     else if(j==n)ans+=n-1+i;
    21     printf("%d
    ",ans);
    22     return 0;
    23 }
    螺旋矩阵

    子矩阵

    暴力DFS选择的行,然后在所选行上DP。

    DP时需要前缀和优化。

     1 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 int read(){
    10     int x=0,f=1;char ch=getchar();
    11     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    12     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    13     return x*f;
    14 }
    15 int f[17][17];
    16 int n,m,r,c;
    17 int mp[17][17];
    18 int ans=1e9;
    19 //bool vis[17];
    20 int use[17];
    21 int ds[17];//行之间的差值 
    22 int cs[17][17];//列之间的差值 
    23 void DP(){
    24     memset(cs,0,sizeof cs);
    25     memset(ds,0,sizeof ds);
    26     memset(f,0x3f,sizeof f);
    27     int i,j;
    28     for(i=1;i<m;i++)
    29         for(j=i+1;j<=m;j++){
    30             for(int k=1;k<=r;k++){
    31                 cs[i][j]+=abs(mp[use[k]][j]-mp[use[k]][i]);
    32             }
    33         }
    34     for(i=1;i<=m;i++)
    35         for(j=2;j<=r;j++){
    36             ds[i]+=abs(mp[use[j]][i]-mp[use[j-1]][i]);
    37         }
    38     //init
    39 //    for(i=1;i<=m;i++)
    40     
    41     //
    42     memset(f[0],0,sizeof f[0]);
    43     for(i=1;i<=c;i++){
    44         for(j=i;j<=m;j++){
    45             for(int k=0;k<j;k++){
    46                 f[i][j]=min(f[i][j],f[i-1][k]+cs[k][j]);
    47             }
    48             f[i][j]+=ds[j];
    49         }
    50     }
    51     int res=1e9;
    52     for(i=c;i<=m;i++)res=min(res,f[c][i]);
    53 //    printf("res:%d
    ",res);
    54     ans=min(ans,res);
    55 //    printf("%d
    ",ans);
    56     return;
    57 }
    58 
    59 void DFS(int dep,int pos){
    60     if(dep>r){
    61 /*        printf("use:");
    62         for(int i=1;i<=r;i++)printf("%d ",use[i]);
    63         printf("
    ");*/
    64         DP();return;
    65     }
    66     int lim=n-(r-dep);
    67     for(int i=pos;i<=lim;i++){
    68         use[dep]=i;
    69         DFS(dep+1,i+1);
    70     }
    71     return;
    72 }
    73 int main(){
    74     int i,j;
    75     n=read();m=read();r=read();c=read();
    76     for(i=1;i<=n;i++)
    77      for(j=1;j<=m;j++)
    78          mp[i][j]=read();
    79     DFS(1,1);
    80 //    use[1]=4;use[2]=5;DP();
    81 
    82 
    83     printf("%d
    ",ans);
    84     return 0;
    85 }
    子矩阵
  • 相关阅读:
    如何用js得到当前页面的url信息方法(JS获取当前网址信息)
    可拖动大小div案例
    div内div水平垂直居中
    div设置absolute情况下填充剩余宽度
    最近很不顺
    [转载]什么是对象序列化,为什么要使用
    mac下安装eclipse以及python
    Myeclipse 10 for mac 破解版下载安装及破解方法
    IOS7学习之路一(新UI之自定义UITableViewCell)
    Xcode5和ObjC新特性
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6078635.html
Copyright © 2011-2022 走看看