#include<bits/stdc++.h>usingnamespace std;intmain(){int t;
cin>>t;while(t--){int n;int a[5000];
cin>>n;for(int i =0; i < n ;i ++) cin>>a[i];//sort(a,a+n);int cnt =0;int res =0;int tt=0;for(int i =0; i < n ; i ++){
cnt += a[i]%2;
tt += i%2;if(i%2==1&& a[i]%2==0){
res ++;}}if(cnt == tt){
cout<<res<<endl;}else{
cout<<-1<<endl;}}return0;}
#include<bits/stdc++.h>#define int long longusingnamespace std;signedmain(){int t;
cin>>t;while(t--){int n,k;
string s;
cin>>n>>k>>s;int cnt =0;int pre =0;int res =0;
k ++;int flag =0;for(int i =0; i < n ; i ++){if(s[i]=='0'){
cnt ++;}else{
flag =1;if(pre ==0){
res +=max(0LL,(cnt)/k);}else{
res +=max(0LL,(cnt-k+1)/k);}
pre =1;
cnt =0;}}
res +=max(0LL,(cnt)/k);if(!flag) res =max(1+max(0LL,(n-1)/k),res);
cout<<res<<endl;}return0;}
D. Task On The Board
题意:给定s串,删除一些字符,重新组合,得到t串。根据t串,可以计算一个b数组。bi = sum(|j-i|) if tj > ti,也就是所有比i位置大的字符的位置差的和。现在给定s和b数组,求t串。
#include<iostream>#include<bits/stdc++.h>#include<unordered_map>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =3e6+7;int n,m,k,t =1,cas =1;int a[N],b[N],c[N];char res[N];int cnt[30];int now;
map<int,int> mp;voidfill_(){for(; now >=0; now --)if(cnt[now]>= mp[0])break;if(now <0)return;for(int i =0; i < n ; i ++)if(a[i]==0)
res[i]='a'+now;for(int i =0; i < n ; i ++){if(res[i]=='a'+now){
mp[0]--;
a[i]=-1;for(int j =0; j < n ; j ++){if(a[j]>0){
mp[a[j]]--;
a[j]-=abs(j-i);
mp[a[j]]++;}}}}
now --;}signedmain(){
cin>>t;while(t--){
string s;
cin>>s;memset(cnt,0,sizeof(cnt));for(int i =0; i < s.size(); i ++) cnt[s[i]-'a']++;
cin>>n;
mp.clear();for(int i =0; i < n ; i ++){
cin>>a[i];
mp[a[i]]++;
res[i]=0;}
now =25;while(mp[0])fill_();
res[n]=0;
cout<<res<<endl;}return0;}
#include<iostream>#include<bits/stdc++.h>#include<unordered_map>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =1e6+7;int n,m,k,t =1,cas =1;int a[N];intcheck(int k,int cnt[]){int tmp = k;for(int j =2;; j ++){int tt =0;for(int i =0; i <26; i ++){
tt += cnt[i]/j;}if(tt >= k){
tmp = j*k;}else{return tmp;}}}signedmain(){
cin>>t;while(t--){int cnt[100]={0};
string s;
cin>>n>>m>>s;for(int i =0; i < n ; i ++){
cnt[s[i]-'a']++;}sort(cnt,cnt+100);reverse(cnt,cnt+100);int res =1;for(int i =1; i <= m && i <= n; i ++){if(m%i ==0){
res =max(res,check(i,cnt));}}
cout<<res<<endl;}return0;}
#include<iostream>#include<bits/stdc++.h>#include<unordered_map>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =1e6+7;int n,m,k,t =1,cas =1;int a[N],b[N];int dp[N];signedmain(){
cin>>t;while(t--){
cin>>n;for(int i =0; i < n ; i ++) cin>>b[i],a[i]=b[i];sort(b,b+n);for(int i =0; i <= n ; i ++) dp[i]=0;for(int i =0; i < n ; i ++) a[i]=lower_bound(b,b+n,a[i])-b+1;int res =0;for(int i =0; i < n ; i ++){
dp[a[i]]= dp[a[i]-1]+1;
res =max(res,dp[a[i]]);}
cout<<n-res<<endl;}return0;}