zoukankan      html  css  js  c++  java
  • R 540

    好久没写题解了嘻嘻嘻,昨天补edu自闭了一天还没补完fg这div3令人愉悦。

    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 typedef long long ll;
     6 const ll mod = 1e9+7;
     7 inline int read() {
     8     int X=0,w=1; char c=getchar();
     9     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    10     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    11     return X*w;
    12 }
    13 const int N = 1e5+5;
    14 int q;ll n,a,b;
    15 int main(){
    16     ios::sync_with_stdio(false);
    17     cin>>q;
    18     while (q--){
    19         cin>>n>>a>>b;
    20         if(2*a<=b){
    21             cout<<n*a<<endl;
    22         } else{
    23             if(n%2==0){
    24                 cout<<n/2*b<<endl;
    25             } else{
    26                 cout<<n/2*b+a<<endl;
    27             }
    28         }
    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 typedef long long ll;
     6 const ll mod = 1e9+7;
     7 inline int read() {
     8     int X=0,w=1; char c=getchar();
     9     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    10     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    11     return X*w;
    12 }
    13 const int N = 2e5+5;
    14 int n,a[N],odd[N],even[N];
    15 int main(){
    16     n=read();
    17     for(int i=1;i<=n;i++){
    18         a[i]=read();
    19         odd[i]=odd[i-1];
    20         even[i]=even[i-1];
    21         if(i&1){
    22             odd[i]+=a[i];
    23         } else{
    24             even[i]+=a[i];
    25         }
    26     }
    27     int ans=0;
    28     for(int i=1;i<=n;i++){
    29         ll s1=odd[i-1]+even[n]-even[i];
    30         ll s2=even[i-1]+odd[n]-odd[i];
    31         if(s1==s2){
    32             ans++;
    33         }
    34     }
    35     cout<<ans<<endl;
    36 }
    View Code

    C:模拟,没啥好说的。注意偶数必须全是4的倍数,奇数的情况 只能有一个奇数,4的倍数大于(n/2)*(n/2)。

    然后填就行了。

      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 typedef long long ll;
      6 const ll mod = 1e9+7;
      7 inline int read() {
      8     int X=0,w=1; char c=getchar();
      9     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     10     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     11     return X*w;
     12 }
     13 const int N = 1e5+5;
     14 int n,a[22][22],c[555],num[1005];
     15 int main(){
     16     n=read();
     17     for(int i=1;i<=n*n;i++){
     18         c[i]=read();
     19         num[c[i]]++;
     20     }
     21     if(n%2==0){
     22         for(int i=1;i<=1000;i++){
     23             if(num[i]%4){
     24                 cout<<"NO";
     25                 exit(0);
     26             }
     27         }
     28         cout<<"YES"<<endl;
     29         int k=1;
     30         for(int i=0;i<n/2;i++){
     31             for(int j=0;j<n/2;j++){
     32                 for(;k<=1000;){
     33                     if(num[k]>=4){
     34                         a[i][j]=a[n-i-1][j]=a[i][n-j-1]=a[n-i-1][n-j-1]=k;
     35                         num[k]-=4;
     36                         break;
     37                     } else{
     38                         k++;
     39                     }
     40                 }
     41             }
     42         }
     43         for(int i=0;i<n;i++){
     44             for(int j=0;j<n;j++){
     45                 cout<<a[i][j]<<' ';
     46             }
     47             cout<<endl;
     48         }
     49     } else{
     50         int f=0;
     51         int cnt=0;
     52         for(int i=1;i<=1000;i++){
     53             if(num[i]&1){
     54                 if(f){
     55                     cout<<"NO"<<endl;
     56                     exit(0);
     57                 } else{
     58                     f=i;
     59                     num[i]--;
     60                 }
     61             }
     62             if(num[i]>=4){
     63                 cnt+=num[i]/4;
     64             }
     65         }
     66         if(cnt<(n/2)*(n/2)){
     67             cout<<"NO"<<endl;
     68             exit(0);
     69         }
     70         int k=1;
     71         a[n/2+1][n/2+1]=f;
     72         for(int i=1;i<=n/2;i++){
     73             for(int j=1;j<=n/2;j++){
     74                 for(;k<=1000;){
     75                     if(num[k]>=4){
     76                         num[k]-=4;
     77                         a[i][j]=a[i][n-j+1]=a[n-i+1][j]=a[n-i+1][n-j+1]=k;
     78                         break;
     79                     } else{
     80                         k++;
     81                     }
     82                 }
     83             }
     84         }
     85         k=1;
     86         for(int i=1;i<=n/2;i++){
     87             for(;k<=1000;){
     88                 if(num[k]>=2){
     89                     a[i][n/2+1]=a[n-i+1][n/2+1]=k;
     90                     num[k]-=2;
     91                     break;
     92                 } else
     93                     k++;
     94             }
     95         }
     96         k=1;
     97         for(int i=1;i<=n/2;i++){
     98             for(;k<=1000;){
     99                 if(num[k]>=2){
    100                     a[n/2+1][i]=a[n/2+1][n-i+1]=k;
    101                     num[k]-=2;
    102                     break;
    103                 } else
    104                     k++;
    105             }
    106         }
    107         cout<<"YES"<<endl;
    108         for(int i=1;i<=n;i++){
    109             for(int j=1;j<=n;j++){
    110                 cout<<a[i][j]<<' ';
    111             }
    112             cout<<endl;
    113         }
    114     }
    115 }
    View Code

    D:二分,和昨晚上eduC异曲同工之妙

     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 typedef long long ll;
     6 const ll mod = 1e9+7;
     7 inline int read() {
     8     int X=0,w=1; char c=getchar();
     9     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    10     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    11     return X*w;
    12 }
    13 const int N = 2e5+5;
    14 int n,m,a[N];
    15 bool cmp(int a,int b){
    16     return a>b;
    17 }
    18 int check(int x){
    19     ll ans=0;
    20     for(int i=1;i<=n;i++){
    21         int tmp=(i-1)/x;
    22         if(a[i]-tmp<=0)
    23             break;
    24         ans+=a[i]-tmp;
    25     }
    26     return ans>=m;
    27 }
    28 int main(){
    29     n=read();m=read();
    30     ll sum=0;
    31     for(int i=1;i<=n;i++){
    32         a[i]=read();
    33         sum+=a[i];
    34     }
    35     if(sum<m){
    36         cout<<-1;
    37         exit(0);
    38     }
    39     sort(a+1,a+1+n,cmp);
    40     int l=1,r=n;
    41     while (l<=r){
    42         int mid=l+r>>1;
    43         if(check(mid)){
    44             r=mid-1;
    45         } else{
    46             l=mid+1;
    47         }
    48     }
    49     cout<<l<<endl;
    50 }
    View Code

    E:**题。

     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 typedef long long ll;
     6 const ll mod = 1e9+7;
     7 inline int read() {
     8     int X=0,w=1; char c=getchar();
     9     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    10     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    11     return X*w;
    12 }
    13 const int N = 1e5+5;
    14 ll n,k;
    15 void check(int x){
    16     if(x==n)
    17         exit(0);
    18 }
    19 int main(){
    20     n=read();k=read();
    21     if(n>k*k-k){
    22         cout<<"NO";
    23     } else{
    24         cout<<"YES"<<endl;
    25         int cnt=0;
    26         for(int l=1;l<=k;l++){
    27             for(int i=1;i+l<=k;i++){
    28                 printf("%d %d
    ",i,i+l);
    29                 cnt++;
    30                 check(cnt);
    31             }
    32             for(int i=k;i-l>=1;i--){
    33                 printf("%d %d
    ",i,i-l);
    34                 cnt++;
    35                 check(cnt);
    36             }
    37         }
    38     }
    39 }
    View Code

    F1:维护一下每颗子树里两种颜色的数量,然后枚举边

     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 typedef long long ll;
     6 const ll mod = 1e9+7;
     7 inline int read() {
     8     int X=0,w=1; char c=getchar();
     9     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    10     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    11     return X*w;
    12 }
    13 const int N = 3e5+5;
    14 int n,s[N][2],a[N],x[N],y[N],dep[N];
    15 vector<int> g[N];
    16 void dfs(int v,int fa){
    17     dep[v]=dep[fa]+1;
    18     if(a[v]==1)
    19         s[v][0]++;
    20     if(a[v]==2)
    21         s[v][1]++;
    22     for(auto u:g[v]){
    23         if(u==fa)continue;
    24         dfs(u,v);
    25         s[v][0]+=s[u][0];
    26         s[v][1]+=s[u][1];
    27     }
    28 }
    29 int main(){
    30     n=read();
    31     for(int i=1;i<=n;i++)
    32         a[i]=read();
    33     for(int i=1;i<n;i++){
    34         x[i]=read();
    35         y[i]=read();
    36         g[x[i]].push_back(y[i]);
    37         g[y[i]].push_back(x[i]);
    38     }
    39     dfs(1,0);
    40     int ans=0;
    41     for(int i=1;i<n;i++){
    42         int u=x[i],v=y[i];
    43         if(dep[u]>dep[v])
    44             swap(u,v);
    45         if(s[1][0]-s[v][0]==0||s[1][1]-s[v][1]==0){
    46             if(s[v][0]==0||s[v][1]==0){
    47                 ans++;
    48             }
    49         }
    50     }
    51     cout<<ans<<endl;
    52 }
    View Code

    F2:好难不会哇。

    看的学长的代码,然后让另一个学长给我讲了讲。。。 

    首先对于两个颜色相同的点 xy他们一定会被分到一起去,所以我们可以暴力把中间的点染色,顺便判一下无解的情况,就是中间夹着一个其他颜色的。

    然后开始dp。

    我们,(7个小时之后),好了,我现在又不会了。不管了。明早高铁摸了。

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 const ll mod = 998244353;
      5 void exgcd(ll a,ll b,ll& d,ll& x,ll& y) {
      6     if (!b) {
      7         d = a;
      8         x = 1;
      9         y = 0;
     10     } else {
     11         exgcd(b, a % b, d, y, x);
     12         y -= x * (a / b);
     13     }
     14 }
     15 ll inv(ll a, ll p) {
     16     ll d, x, y;
     17     exgcd(a, p, d, x, y);
     18     return d == 1 ? (x+p)%p : -1;
     19 }
     20 const int N = 3e5+5;
     21 vector<int> g[N],c[N];
     22 int par[N][22],dep[N];
     23 void dfs(int v,int fa){
     24     dep[v]=dep[fa]+1;
     25     par[v][0]=fa;
     26     for(int i=1;(1<<i)<=dep[fa];i++)
     27         par[v][i]=par[par[v][i-1]][i-1];
     28     for(auto u:g[v]){
     29         if(u==fa)continue;
     30         dfs(u,v);
     31     }
     32 }
     33 int lca(int x,int y){
     34     if(dep[x]>dep[y])swap(x,y);
     35     for(int i=20;i>=0;i--)
     36         if(dep[x]<=dep[y]-(1<<i))
     37             y=par[y][i];
     38     if(x==y)return x;
     39     for(int i=20;i>=0;i--){
     40         if(par[x][i]==par[y][i])continue;
     41         x=par[x][i],y=par[y][i];
     42     }
     43     return par[x][0];
     44 }
     45 int n,k,a[N];
     46 void slove(){
     47     for(int i=1;i<=k;i++){
     48         int lca_=c[i][0];
     49         for(auto u:c[i])
     50             lca_=lca(lca_,u);
     51         for(auto u:c[i]){
     52             if(u==lca_)continue;
     53             int v=u;
     54             while (v!=lca_){
     55                 v=par[v][0];
     56                 if(a[v]!=0&&a[v]!=i){
     57                     cout<<0<<endl;
     58                     exit(0);
     59                 }
     60                 if(a[v]==i)break;
     61                 a[v]=i;
     62             }
     63         }
     64     }
     65 }
     66 ll dp[N][2];
     67 void dfs2(int v,int fa){
     68     ll tmp=1;
     69     for(auto u:g[v]){
     70         if(u==fa)continue;
     71         dfs2(u,v);
     72         tmp=tmp*(dp[u][0]+dp[u][1])%mod;
     73     }
     74     if(a[v]==0){
     75         dp[v][0]=tmp;dp[v][1]=0;
     76         for(auto u:g[v]){
     77             if(u==fa)continue;
     78             ll x=tmp*inv(dp[u][0]+dp[u][1],mod)%mod;
     79             x=x*dp[u][1]%mod;
     80             dp[v][1]=(dp[v][1]+x)%mod;
     81         }
     82     } else{
     83         dp[v][0]=0;dp[v][1]=tmp;
     84     }
     85 }
     86 int main(){
     87     ios::sync_with_stdio(false);
     88     cin>>n>>k;
     89     for(int i=1;i<=n;i++){
     90         cin>>a[i];
     91         c[a[i]].push_back(i);
     92     }
     93     int x,y;
     94     for(int i=1;i<n;i++){
     95         cin>>x>>y;
     96         g[x].push_back(y);
     97         g[y].push_back(x);
     98     }
     99     dfs(1,0);
    100     slove();
    101     dfs2(1,0);
    102     cout<<dp[1][1];
    103 }
    View Code
  • 相关阅读:
    JavaScript 严格模式
    JavaScript 编码规范 之 循环语句
    分享21个基于jquery菜单导航的效果
    揭秘:淘宝搜索排名真正规则和技巧
    11款网站死链检测工具
    收集Windows 8 Metro UI 风格网站资源,觉得不错的顶啊!!
    29个非常流行的jQuery提示信息插件
    分享14个很酷的jQuery导航菜单插件
    jquery select 常用操作总结
    必须去收藏14个响应式布局的前端开发框架
  • 原文地址:https://www.cnblogs.com/MXang/p/10404255.html
Copyright © 2011-2022 走看看