题意:给你一个很长的数,可以删减里面的任意数字,要求本身不能除以2,但是该数的各位和能除以2,输出任意符合要求的删减过后的数
思路:找出两个奇数即可,奇数的拼凑本身就是奇数,但是和就是偶数,就满足要求了。。竟然wa了两发,,-1没有换行。。。
1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn = 1e5;
5
6 int main(){
7 int T;
8 scanf("%d",&T);
9 while(T--)
10 {
11 int n;
12 scanf("%d",&n);
13 string s;
14 cin>>s;
15 if(n==1) {
16 printf("-1\n");
17 continue;
18 }
19 int sum=0;
20 int a[100];
21 for(int i=0;i<n;i++)
22 {
23 if((s[i]-'0')%2!=0)
24 {
25 // printf("%d\n",s[i]-'0');
26 a[sum++]=s[i]-'0';
27 if(sum==2)
28 break;
29 }
30 }
31 if(sum==2)
32 {
33 for(int i=0;i<sum;i++)
34 {
35 printf("%d",a[i]);
36 }
37 printf("\n");
38 }
39 else
40 printf("-1\n");
41 }
42 return 0;
43 }
题意:给你一个序列a[],要求你找出k使得k位置之前是严格单调递增,k之后是严格单调递减,你可以任意删减>0的数,对他减一任意次,问是否这个序列有这样的K
思路:对于K左边的要求a[i]>i-1即可,当不满足时,此时的i就是k,K后面的a[i]=min(a[i-1]-1,a[i]),这样一直减下去,判断最后一个数是否>0即可,当一直满足a[i]>i-1时,那么这个序列就可以通过删减变成严格单调递增序列,也是满足条件的的
1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn = 3e5+10;
5
6 int main(){
7 int T;
8 scanf("%d",&T);
9 while(T--)
10 {
11 int n;
12 scanf("%d",&n);
13 long long a[maxn];
14 for(int i=0;i<n;i++)
15 cin>>a[i];
16 int k=0;
17 bool flag=true;
18 for(int i=0;i<n;i++)
19 {
20 if(a[i]<=i-1)
21 {
22 flag=false;
23 k=i;
24 break;
25 }
26 }
27 if(n==1||flag)
28 printf("Yes\n");
29 else
30 {
31 int j=0;
32 for(int i=k;i<n;i++)
33 {
34 a[i]=min(a[i-1]-1,a[i]);
35 }
36 if(a[n-1]>=0)
37 printf("Yes\n");
38 else
39 printf("No\n");
40 }
41 }
42 return 0;
43 }