zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Spring Richclient — 企业级富客户端开发框架介绍,第 1 部分
    oracle的表名、字段名、constraint名的长度限制分别是多少?
    eclipse指定启动的jdk
    女人为什么爱攀比?
    Oracle一些常用的查询命令总结(持续更新)
    js冒泡事件之之之
    Aspose插件
    oracle11g导入到10g
    转:OpenCms 9.0.1汉化
    metasploit常用命令
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6029690.html
Copyright © 2011-2022 走看看