Codeforces Round #349 (Div. 2)
第一题直接算就行了为了追求手速忘了输出yes导致wa了一发。。。
第二题技巧题,直接sort,然后把最大的和其他的相减就是构成一条直线,为了满足条件就+1
#include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define pi acos(-1) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #define MIN(a,b) a<b ? a:b using namespace std; const double g=10.0,eps=1e-9; const int N=100000+10,maxn=10000+10,inf=0x3f3f3f; ll a[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); ll n,sum=0; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; sum+=a[i]; } sort(a,a+n); cout<<2*a[n-1]-sum+1<<endl; return 0; }
B
第三题没来的及写就打另一场去了。。。发现是道dp(我估计写了也写不对)用dp[i][0]表示i到i+2能否截取,dp【i】【1】表示i到i+3能否截取
然后从后向前扫一遍
#include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define pi acos(-1) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-9; const int N=10000+10,maxn=300,inf=0x3f3f3f; bool dp[N][2]; set<string>ans; int main() { ios::sync_with_stdio(false); cin.tie(0); string s; cin>>s; for(int i=s.size()-1;i>=5;i--) { if(i+2==s.size()) { dp[i][0]=1; ans.insert(s.substr(i,2)); continue; } if(i+3==s.size()) { dp[i][1]=1; ans.insert(s.substr(i,3)); continue; } if(dp[i+2][1]||(dp[i+2][0]&&s.substr(i,2)!=s.substr(i+2,2))) { dp[i][0]=1; ans.insert(s.substr(i,2)); } if(dp[i+3][0]||(dp[i+3][1]&&s.substr(i,3)!=s.substr(i+3,3))) { dp[i][1]=1; ans.insert(s.substr(i,3)); } } cout<<ans.size()<<endl; set<string>::iterator it; for(it=ans.begin();it!=ans.end();it++) cout<<*it<<endl; return 0; }
C
D,E待补
时间: 2024-10-06 21:30:50