冯志远0920

排序

时间限制: 1 Sec  内存限制: 256 MB
提交: 80  解决: 52
[提交][状态][讨论版]

题目描述

输入

输出

样例输入

6 1 2 4 3 6 5

样例输出

2

提示

 图

时间限制: 1 Sec  内存限制: 256 MB
提交: 173  解决: 48
[提交][状态][讨论版]

题目描述

输入

输出

样例输入

2 4 URUU UUUU BRUR BRUU 4 UUBB RURU UUUU URBU

样例输出

T N

提示

时间限制: 1 Sec  内存限制: 256 MB
提交: 26  解决: 13
[提交][状态][讨论版]

题目描述

输入

输出

样例输入

3 101

样例输出

37

提示

 个人感受:这套题目,第一题卡输入,第二题爆10分,第三题不知道为什么0分,OJ上可以有30分的??,奇怪,然后就70+10+0=80分

第一题,证明:因为一个数,如果后面有比它小的数,那么不交换它自己的话,是无法改变相对次序的,因此只要后面有比它小的数,就必须交换一次。

第二题,我打了压位,压了64为,即LL压位,最高复杂度是2000^3*5/64,但是可以过,本来是去裸打60分的。

第三题,考试直接模拟暴力,结果不知道为什么,OJ上30分,然后没分。

第二题(错误原因):因为每次A移的时候,B没移,B时也一样,然后cnt还直接爆炸了,......,这样样例真的水。

T1

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #define N 5000007
 7 using namespace std;
 8  
 9 int n,ans=0;
10 int a[N],p[N];
11  
12 int main()
13 {
14  
15      
16     scanf("%d",&n);
17     for (int i=1;i<=n;i++)
18         scanf("%d",&a[i]);
19      
20     int tail=1;
21     p[tail]=a[n];
22     for (int i=n-1;i>=1;i--)
23     {
24         while(tail>=1&&a[i]<p[tail])
25             tail--;
26         p[++tail]=a[i];
27         if (tail!=1) ans++; 
28     }
29      
30     printf("%d
",ans); 
31 }

T2

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #define N 2027
 7 #define LL long long
 8 using namespace std;
 9  
10 int cas,n,cnt;
11 int boo[N][N];
12 LL A[N][2027/50],B[N][2027/50];
13 char ch[N];
14  
15 bool check()
16 {
17     for (int i=1;i<=n;i++)
18         for (int j=1;j<=n;j++)
19             if (boo[i][j]==1)
20             {
21                 for (int k=1;k<=cnt;k++)
22                     if ((A[i][k]&A[j][k])!=A[j][k]) return false;           
23             }
24             else if (boo[i][j]==2)
25             {
26                 for (int k=1;k<=cnt;k++)
27                     if ((B[i][k]&B[j][k])!=B[j][k]) return false;
28             }
29     return true;        
30 }
31  
32 int main()
33 {
34  
35      
36     scanf("%d",&cas);
37     while(cas--)
38     {
39         memset(A,0,sizeof(A));
40         memset(B,0,sizeof(B));
41         scanf("%d",&n);
42         for (int i=1;i<=n;i++)
43         {
44             scanf("%s",ch+1);
45             cnt=1;
46             for (int j=1;j<=n;j++)
47             {
48                 if (ch[j]=='R')
49                 {
50                     A[i][cnt]=(A[i][cnt]<<1)+1;
51                     B[i][cnt]<<=1;
52                     boo[i][j]=1;
53                 }
54                 else if (ch[j]=='B')
55                 {
56                     B[i][cnt]=(B[i][cnt]<<1)+1;
57                     A[i][cnt]<<=1;
58                     boo[i][j]=2;
59                 }
60                 else
61                 {
62                     boo[i][j]=0;
63                     A[i][cnt]<<=1;
64                     B[i][cnt]<<=1;
65                 }
66                 if (j%62==0) cnt++;
67             }
68         }
69         if (check()) printf("T
");
70         else printf("N
");
71     }
72 }
原文地址:https://www.cnblogs.com/fengzhiyuan/p/7569873.html