十一月天梯赛训练补题 11.4

A - Prime Square CodeForces - 1436B 

 

代码:

 1 #include <set>
 2 #include <map>
 3 #include <list>
 4 #include <stack>
 5 #include <queue>
 6 #include <deque>
 7 #include <cmath>
 8 #include <string>
 9 #include <vector>
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <sstream>
14 #include <iostream>
15 #include <algorithm>
16 //#include <unordered_map>
17 #define INF 0x3f3f3f3f
18 #define ll long long
19 #define ull unsigned long long
20 #define FILL(a,n,v) fill(a,a+n,v)
21 #define Mset(a,v) memset(a,v,sizeof a)
22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b
23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
24 using namespace std;
25 const int maxn=1e5;
26 
27 int t;
28 int n;
29 
30 bool isprime(int x)
31 {
32     if(x<=1) return false;
33     for(int i=2;i*i<=x;i++)
34     {
35         if(x%i==0) return false;
36     }
37     return true;
38 }
39 
40 int main()
41 {
42     cin>>t;
43     while(t--)
44     {
45         cin>>n;
46         if(isprime(n))
47         {
48             for(int i=0;i<n;i++)
49             {
50                 for(int j=0;j<n;j++)
51                 {
52                     cout<<1<<(j==n-1?'\n':' ');
53                 }
54             }
55         }
56         else
57         {
58             int t=1;
59             while(1)
60             {
61                 t++;
62                 if(!isprime(t)&&isprime(t+n-1)) break;
63             }
64             
65             for(int i=0;i<n;i++)
66             {
67                 for(int j=0;j<n;j++)
68                 {
69                     if(i==j) cout<<t<<(j==n-1?'\n':' ');
70                     else cout<<1<<(j==n-1?'\n':' ');
71                 }
72             }
73         }
74     }
75 }

 

 

B - Extreme Subtraction CodeForces - 1443D 

差分数组+思维

有一个长度为n的数组a。你可以进行无数次如下操作:

  1. a1~ai 减1
  2. ai~an减1

问能否使数组中的元素全部变成0

思路:

转化成一个差分问题。(假设差分数组为ans)要使数组中的全部数都为0,那么差分数组也必须为0且ans[1]=0。
那么我们来看两种操作对于差分数组有何影响:

操作1:ans[1]-1 且ans[i+1]+1。那么我们就可以凭借操作1,将差分数组中的负数变成0,同时减小ans[1]。

操作2:ans[i+1]-1且ans[n+1]+1。那么我们就可以凭借操作2,将差分数组中的正数变成0,而ans[n+1]为多少和我们并没有关系。

在最开始时ans[1]=a[1],所以只要差分数组的负数和的绝对值小于等于a[1],即输出YES,否则输出NO。
因为如果差分数组的负数和的绝对值大于a[1],那么要使后面的数都变成0,ans[1]就会变成负数,而并没有使ans[1]由负数变成0的操作,操作2只能使ans[1]由正数变成0,所以这样并不满足要求。

 

代码:

 1 #include <set>
 2 #include <map>
 3 #include <list>
 4 #include <stack>
 5 #include <queue>
 6 #include <deque>
 7 #include <cmath>
 8 #include <string>
 9 #include <vector>
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <sstream>
14 #include <iostream>
15 #include <algorithm>
16 //#include <unordered_map>
17 #define INF 0x3f3f3f3f
18 #define ll long long
19 #define ull unsigned long long
20 #define FILL(a,n,v) fill(a,a+n,v)
21 #define Mset(a,v) memset(a,v,sizeof a)
22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b
23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
24 #define fcin freopen("in.txt","r",stdin)
25 #define fcout freopen("out.txt","w",stdout)
26 using namespace std;
27 const int maxn=1e5+10;
28 int t;
29 int n;
30 int a[maxn];
31 int d[maxn];
32 
33 int main()
34 {
35 //    fcin;
36     fcio;
37     cin>>t;
38     while(t--)
39     {
40         cin>>n;
41         for(int i=1;i<=n;i++) cin>>a[i];
42         d[1]=a[1];
43         for(int i=2;i<=n;i++) d[i]=a[i]-a[i-1];
44         
45         int sum=0;
46         for(int i=2;i<=n;i++)  if(d[i]<0) sum-=d[i];
47         
48         if(sum>d[1]) cout<<"NO"<<endl;
49         else cout<<"YES"<<endl;
50     }
51     return 0;
52     
53 }

 

 

C - Palindromifier  CodeForces - 1421C 

思维+规律

题意:

给出一个字符串s,要求通过若干数量的操作1和操作2将s变为字符串。

字符串:s1s2s3s4...sn 

操作1:

选择下标i,将s的子串s2s3s4...si逆序后加到s左边 即si...s4s3s2s1s2s3s4...sn

操作2:

选择下标i,将s的子串sn-1sn-2sn-3...si逆序后加到s的右边即s1s2s3s4...snsisi+1si+2...sn-1

 

题目不要求步数最短,所以考虑对于任何字符串的通用办法。

假设s=abcde

L 2 s-->babcde

R 2 s-->babcdedcba

R 9 s-->babcdedcbab

 

代码:

 1 #include <set>
 2 #include <map>
 3 #include <list>
 4 #include <stack>
 5 #include <queue>
 6 #include <deque>
 7 #include <cmath>
 8 #include <string>
 9 #include <vector>
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <sstream>
14 #include <iostream>
15 #include <algorithm>
16 //#include <unordered_map>
17 #define INF 0x3f3f3f3f
18 #define ll long long
19 #define ull unsigned long long
20 #define FILL(a,n,v) fill(a,a+n,v)
21 #define Mset(a,v) memset(a,v,sizeof a)
22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b
23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
24 #define fcin freopen("in.txt","r",stdin)
25 #define fcout freopen("out.txt","w",stdout)
26 using namespace std;
27 
28 
29 int main()
30 {
31 //    fcin;
32 //    fcout;
33     string s;
34     cin>>s;
35     
36     cout<<3<<endl;
37     cout<<"L 2"<<endl;
38     cout<<"R 2"<<endl;
39     cout<<"R "<<s.length()*2-1<<endl;
40     return 0;
41 }

 

posted @ 2020-11-06 21:33  lihaji  阅读(127)  评论(0编辑  收藏  举报