首页 > 其他 > 详细

十一月天梯赛训练补题 11.4

时间:2020-11-06 22:40:43      阅读:28      评论:0      收藏:0      [点我收藏+]

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 }

 

十一月天梯赛训练补题 11.4

原文:https://www.cnblogs.com/lihahahahaji/p/13939054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!