• cf378C(模拟)


    题目链接:http://codeforces.com/contest/733/problem/C

    思路:模拟

    因为数组b里的元素是顺序对应a数组元素的和,可以开个c数组储存b数组元素对应的a数组元素区间;

    然后对每个c数组区间,找出最大并且存在与其相邻且小于它的元素的元素,从这个元素开始向左或者向右合并此区间所有元素;

    要注意一下区间长度为1即只有一个元素的情况,还有输出的位置是合并后的相对位置;

    代码:

      1 #include <bits/stdc++.h>
      2 #define MAXN 501
      3 using namespace std;
      4 
      5 int main(void){
      6     int n, a[MAXN], k, b[MAXN], c[MAXN];
      7     scanf("%d", &n);
      8     for(int i=0; i<n; i++){
      9         scanf("%d", &a[i]);
     10     }
     11     scanf("%d", &k);
     12     for(int i=0; i<k; i++){
     13         scanf("%d", &b[i]);
     14     }
     15     int ans=0, i=0, flag=0, jj=0, gg=1;
     16     c[0]=0;
     17     while(jj<k&&i<n){
     18         ans+=a[i];
     19         if(ans==b[jj]){
     20             ans=0;
     21             jj++;
     22             c[gg++]=i;
     23         }
     24         i++;
     25     }
     26     if(jj==k&&i==n){
     27         string d;
     28         int e[MAXN], star=0;
     29         for(i=0; i<k; i++){
     30             int flag=1, mm=0, num=0, j;
     31             for(int j=c[i]+1-(i==0); j<=c[i+1]; j++){
     32                 if(a[j]>num){
     33                     num=a[j];
     34                     mm=j;
     35                 }
     36             }
     37             int mmm=mm;
     38             if(mmm==c[i]+1-(i==0)&&mmm<c[i+1]&&a[mmm]==a[mmm+1]){
     39                 while(mmm<c[i+1]&&a[mmm]==a[mmm+1]){
     40                     mmm++;
     41                 }
     42                 // cout << mmm << "**" << c[i+1] << endl;
     43                 if(mmm!=c[i+1]){
     44                     mm=mmm;
     45                 }else{
     46                     flag=0;
     47                 }
     48                 // cout << flag << endl;
     49             }
     50             int jj=mm-c[i]+1+i-(i!=0);
     51             // cout << mm << " " << jj << endl;
     52             if(mm<c[i+1]&&a[mm]>a[mm+1]){
     53                 int x=mm;
     54                 while(x<c[i+1]){
     55                     d[star]='R';
     56                     e[star]=jj;
     57                     x++;
     58                     star++;
     59                 }
     60                 x=mm-1;
     61                 // cout << x << " " << c[i] << endl;
     62                 while(x>c[i]-(i==0)){
     63                     d[star]='L';
     64                     e[star]=jj;
     65                     x--;
     66                     jj--;
     67                     star++;
     68                 }
     69             }else if(mm>c[i]+(i!=0)&&a[mm]>a[mm-1]){
     70                 int x=mm;
     71                 while(x>c[i]+(i!=0)){
     72                     d[star]='L';
     73                     e[star]=jj;
     74                     x--;
     75                     jj--;
     76                     star++;
     77                 }
     78                 x=mm+1;
     79                 while(x<=c[i+1]){
     80                     d[star]='R';
     81                     e[star]=jj;
     82                     x++;
     83                     star++;
     84                 }
     85             }else if(b[i]==a[c[i]+1]){
     86                 continue;
     87             }
     88             if(!flag){
     89                 printf("NO
    ");
     90                 return 0;
     91             }
     92         }
     93         printf("YES
    ");
     94         for(int j=0; j<star; j++){
     95             printf("%d %c
    ", e[j], d[j]);
     96         }
     97     }else{
     98         printf("NO
    ");
     99     }
    100     return 0;
    101 }
  • 相关阅读:
    Linux shell 脚本中变量的数学计算【转】
    Ubuntu上配置Eclipse:安装CDT【转】
    第一个Java程序示例——Hello World!【转】
    Cmake的介绍和使用 Cmake实践【转】
    CMake使用总结【转】
    Ubuntu 16.04安装JDK/JRE并配置环境变量【转】
    Linux进程间通信——使用信号量【转】
    wpa_supplicant介绍【转】
    【转】Android屏幕适配全攻略(最权威的官方适配指导)
    SQL2005备份数据库到远程服务器中
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6029690.html
Copyright © 2020-2023  润新知