Codeforces Round #616 (Div. 2)
Posted vampire6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #616 (Div. 2)相关的知识,希望对你有一定的参考价值。
题意:给你一个很长的数,可以删减里面的任意数字,要求本身不能除以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 int sum=0; 16 char a[100]; 17 for(int i=0;i<n;i++) 18 { 19 if((s[i]-‘0‘)%2!=0) 20 { 21 // printf("%d ",s[i]-‘0‘); 22 a[sum++]=s[i]; 23 } 24 } 25 if(sum>=2) 26 { 27 printf("%c%c ",a[0],a[1]); 28 } 29 else 30 printf("-1 "); 31 } 32 return 0; 33 }
题意:给你一个序列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 "); 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 "); 38 else 39 printf("No "); 40 } 41 } 42 return 0; 43 }
太菜,c睡起来再补了。。
以上是关于Codeforces Round #616 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #616 (Div. 2)
Codeforces Round #616 (Div. 2)