码迷,mamicode.com
首页 > 编程语言 > 详细

Educational Codeforces Round 80 (Rated for Div. 2)【A,B,C,D】C题DP{GG了} D题【数组转化成二进制形式判断+二分】

时间:2020-01-15 19:24:30      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:round   org   col   个数   span   ORC   long   fine   als   

技术图片

 

 

 A题直接暴力水过

 1 #include<bits/stdc++.h>
 2  
 3 using namespace std;
 4 #define int long long 
 5 #define N 6666666
 6 int arr[N];
 7  
 8 signed main(){
 9     int _;cin>>_;
10     while(_--){
11         int n,m;
12         cin>>n>>m;
13         if(n>=m){
14             cout<<"YES"<<\n;
15             continue;
16         }
17         int f=0;
18         for(int i=1;i<n;i++){
19             int t=m/(i+1);
20             if(m%(i+1)) t++;
21             if(i+t<=n){
22                 f=1;
23                 break;
24             }
25         }
26         if(f){
27             cout<<"YES"<<\n;
28         }else{
29             cout<<"NO"<<\n;
30         }
31     }
32     return 0;
33 }

技术图片

 

 

 暴力打了个表看出的规律。

 1 #include<bits/stdc++.h>
 2  
 3 using namespace std;
 4 #define int long long 
 5 #define N 6666666
 6 int arr[N];
 7  
 8 signed main(){
 9     int _;cin>>_;
10     while(_--){
11         int a,b;
12         cin>>a>>b;
13         if(b<9){
14             cout<<"0"<<\n;
15             continue;
16         }
17         int s=0;int cnt=0;
18         for(int i=0;;i++){
19             s=s*10+9;
20             
21             if(s>b){
22                 
23                 break;
24             }cnt++;
25             
26         }
27         cout<<cnt*a<<\n;
28     }
29     return 0;
30 }

技术图片

 

 

 不会DPQAQ

  • 题意:用n个数字(1~n),构造两个长度为m的序列满足以下条件:

    • aibi(1im)?
    • a序列不递减
    • b序列不递增

    问有多少种方案?

  • 分析:

    • 根据a不递减,b不递增,且aibi(1im)ai≤bi(1≤i≤m) 的条件,我们可以得出如果将b序列反向加在a序列后面构成新的序列,这个序列一定是非递减的。所以问题转为2*m的序列,用n个数构成非递减序列的方案数。DP。
    • dp[i][j]表示第 i 个位置放 j 数的方案数,显然它等于前面 i - 1 位放 k (kj) 的方案数之和
  •  1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 #define int long long
     5 #define mod 1000000007
     6 int dp[2000][2000];//
     7 //dp[i][j]表示第 i 个位置放 j 数的方案数,
     8 //显然它等于前面 i - 1 位放 k (k≤j) 的方案数之和。
     9 signed main(){
    10     int n,m;
    11     int ans=0;
    12     cin>>n>>m;
    13     for(int i=1;i<=n;i++) dp[1][i]=1;
    14     for(int i=2;i<=2*m;i++){
    15         for(int j=1;j<=n;j++){
    16             for(int k=1;k<=j;k++){
    17                 dp[i][j]=(dp[i][j]+dp[i-1][k])%mod;
    18             }
    19         }
    20     }
    21     for(int i=1;i<=n;i++){
    22         ans=ans+dp[2*m][i];
    23         ans=ans%mod;
    24     }
    25     cout<<ans;
    26     return 0;
    27 } 

    技术图片

     

    二分 

     

  • 二分的check如何判断

    check(x)思路,把数组转化成二进制形式,如果当前为大于x,则改位二进制数为1,否则为零,最后的到的二进制数即可替代数组。

  •  1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define int long long
     4 #define N 300009
     5 int arr[N][20];
     6 int vis[N];
     7 int n,m;
     8 int ansx,ansy;
     9 int check(int K){
    10     for(int i=0;i<=300;i++) vis[i]=0;
    11     for(int i=1;i<=n;i++){
    12         int sum=0;
    13         for(int j=1;j<=m;j++){
    14             if(arr[i][j]>=K)
    15                 sum|=1<<(j-1);
    16         }
    17         vis[sum]=i;
    18     }
    19     for(int i=0;i<=256;i++){
    20         for(int j=0;j<=256;j++){
    21             if(vis[i]&&vis[j]&&(((1<<m)-1)==(i|j))){
    22                 ansx=vis[i];
    23                 ansy=vis[j];
    24                 return 1;
    25             }
    26         }
    27     }
    28     return 0;
    29 }
    30 signed main(){
    31     cin>>n>>m;
    32     for(int i=1;i<=n;i++)
    33         for(int j=1;j<=m;j++)
    34             cin>>arr[i][j];
    35     int l=0;int r=1000000000;
    36     ansx=0;
    37     ansy=0;
    38     while(l<=r){
    39         int mid=(l+r)/2;
    40         if(check(mid)){
    41             l=mid+1;
    42         }else{
    43             r=mid-1;
    44         }
    45     }
    46     cout<<ansx<<" "<<ansy;
    47     return 0;
    48 }

     

Educational Codeforces Round 80 (Rated for Div. 2)【A,B,C,D】C题DP{GG了} D题【数组转化成二进制形式判断+二分】

标签:round   org   col   个数   span   ORC   long   fine   als   

原文地址:https://www.cnblogs.com/pengge666/p/12198058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!