题解教育Codeforcesラウンド75は、[事業部の定格。2](CF1251)

最初の3つの質問を完了するために、今日のオープンクエスチョン時間半、半分しか時間。最後にT3を1分または支払います。私たちは、コミュニティサービスは、私はああKuangxiangを格付けつながることを言わなければなりません。または私は(あまりにも料理でした

A:奇数の連続期間を参照するには何の文字がありません、それは実現可能な説明です。

1の#include <stdio.hの>
 2の#include < ストリング・H>
 3  の#defineがINTレジスタ
 4  の#define ILインライン
 5  使って 名前空間STDを、
6  のconst  int型 N = 100005 7  INT T、CN [N]、N。
8  チャーS [N]。
9  INT メイン(){
 10      のscanf(" %d個の\ n "、&T)。
11      一方(T-- ){
 12          のscanf(" %sの"、+ S 1)、N = STRLEN(S + 1 )。
13          のために(これはI = 0 ; iは< 26 ; ++ I)CN [I] = 0 ;
14          のために(これはI = 1、jは、X; iが<= N; i = j)は{
 15              J = I、X = 0 16              のために(; S [J] == S [i]は&& J <= N; ++ j)は++ X。
17              であれば(X&1)CN [S [I] - [ A ' ] = 1 18          }
 19          のために(これはI = 0 ; iが< 26 ; ++ I)なら(CN [I])のputchar(I + ' ' )。
20          のputchar(' の\ n ' );
21     }
 22 リターン0 23 }       
コードの表示

B:私たちは、0と1を容易に配置することができることを見出しDPので、F [i] [j]が1つの割当j番目の正面Iを示し、パリンドローム列を得ることができる最大値が得られました。

kが奇数である、とlen [i]は奇数、可能である場合、kが偶数である場合に関係なく、lenの[I]は奇数と偶数のために実現可能です。

1の#include <stdio.hの>
 2の#include < ストリング・H>
 3  の#defineがINTレジスタ
 4  の#define ILインライン
 5  使って 名前空間STDを、
6  のconst  int型 N = 55 7  INT T、N、[N]、O1、O2、F [N] [N * N]。
8  チャーS [N]、[N]。
9、IL INT MAX(それP、それQ){
 10      リターン P> Q?P:Q;
11  }
 12、IL 空隙 ckMax(INTPは、Q){
13      、P =(P> Q?P:Q)。
14  }
 15  INT メイン(){
 16      のscanf(" %d個の\ n "、&T)。
17      一方(T-- ){
 18          のscanf(" %d個の\ n "、&​​N)、O1 = 0 19          のために(それi = 1 ; iが<= N ++ I)
 20              のscanf(" %sの"、S [I] + 1)、[I] =のSTRLEN(S [I] + 1 )。
21          のために(これはI = 1 ; I <= N; ++ I)
22              のために(これはJ = 1 ; J <= A [i]の; ++ j)をO1 + =(S [I] [J] == ' 1 ')、O 2 + =(S [I] [J] == ' 0 " );
23      //     F [I] [J]:I个分配了J个1前
24          のmemset(F、 - 1はsizeof(F)); F [ 0 ] [ 0 ] = 0 ;
25          のために(これはI = 1 ; I <= N ++ I)
 26              のために(これはJ = 0 ; J <= O1; ++ j)は
 27                  のために(それはK = 0 ; kは<= [I] && K + J <= O1; ++ K)
 28                      もし(〜F [I- 1 ] [J])ckMax(F [I] [J + K]、F [I- 1 ] [J] +((K&1)&&([I]&1))+ (!(K&1 )));
29          のprintf(" %Dを\ n " 、F [N] [O1])。
30      }
 31      リターン 0 32 }
コードの表示

C:変化しなくても奇数と、奇数と偶数の記録配列を提唱し、マージソートの明らかに相対的な順序。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define it register int
 4 #define il inline
 5 using namespace std;
 6 const int N=1000005;
 7 int T,a[N],pos[N],n,b[N],cna,cnb;
 8 char s[N];
 9 il void fr(int &num){
10     num=0;char c=getchar();int p=1;
11     while(c<'0'||c>'9') c=='-'?p=-1,c=getchar():c=getchar();
12     while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
13     num*=p;
14 }
15 int main(){
16     fr(T);
17     while(T--){
18         scanf("%s",s+1);
19         n=strlen(s+1);cna=cnb=0;
20         for(it i=1,x;i<=n;++i) ((x=s[i]-'0')&1)?a[++cna]=x:b[++cnb]=x;
21         it i=1,j=1;
22         while(i<=cna&&j<=cnb)
23             if(a[i]<b[j]) printf("%d",a[i]),++i;
24             else printf("%d",b[j]),++j;
25         while(i<=cna) printf("%d",a[i]),++i;
26         while(j<=cnb) printf("%d",b[j]),++j;
27         putchar('\n');
28     }
29     return 0;
30 }
31 //所有的奇数和偶数相对位置不变 把奇数偶数搞个数组记录下
View Code

剩下三题是考后补的:

D:一眼二分。。早知道先开D了(分多啊)二分一下最小的可行答案并且进行检验。一个小贪心,最开始按照l,r从大到小排序。很凉心地放D题。。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #define it register int
 4 #define il inline 
 5 using namespace std;
 6 const int N=1000005;
 7 typedef long long ll;
 8 struct ky{
 9     ll a,b;
10     bool operator<(const ky&p)const{
11         return a^p.a?a>p.a:b>p.b;
12     }
13 }a[N];
14 int T,n,half;
15 ll m;
16 il bool ck(ll x){
17     ll cnt=0,tot=0;
18     for(it i=1;i<=n;++i) a[i].a>=x?tot+=a[i].a,++cnt:(a[i].b<x?tot+=a[i].a:(cnt<half?++cnt,tot+=x:tot+=a[i].a));
19     if(cnt<half) return 0;
20     return tot<=m;
21 }
22 il void ms(){
23     ll l=0,r=1e18,mid;
24     while(l<=r) mid=l+r>>1,ck(mid)?l=mid+1:r=mid-1;
25     printf("%I64d\n",r);
26 }
27 namespace io {
28     const int SIZE = (1 << 21) + 1;
29     char ibuf[SIZE], *iS, *iT, obuf[SIZE], *oS = obuf, *oT = oS + SIZE - 1, c, qu[55];
30     int f, qr;
31 #define gc() (iS == iT ? (iT = (iS = ibuf) + fread (ibuf, 1, SIZE, stdin), (iS == iT ? EOF : *iS ++)) : *iS ++)
32     inline void flush () {fwrite (obuf, 1, oS - obuf, stdout);oS = obuf;}
33     template <class I>
34     inline void fr (I &x) {
35         for (f = 1, c = gc(); c < '0' || c > '9'; c = gc()) if (c == '-') f = -1;
36         for (x = 0; c <= '9' && c >= '0'; c = gc()) x = x * 10 + (c & 15);
37         x *= f;
38     }
39     struct Flusher_ {~Flusher_() {flush();}} io_flusher_;
40 }
41 using io :: fr;  
42 int main(){ 
43     fr(T);
44     while(T--){
45         fr(n),fr(m),half=(n+1>>1);
46         for(it i=1;i<=n;++i) fr(a[i].a),fr(a[i].b);
47         sort(a+1,a+1+n),ms();
48     }
49     return 0;    
50 }
View Code

E:看到双倍经验直接看hard version 。。然后以为是个dp。。突然发现可以贪心。。然后就随手一发贪心。。过了之后看到标签还有binary search ,我并没有想到,如果有会二分做法的大佬请留言教我一下或私信D我,谢谢指教!

更好玩的是交了easy version 之后看到tag是dp和greedy,并没有binary search,难道说hard version的算法不适用于easy version?幸好我打了贪心两边都能过

 1 #include<stdio.h>
 2 #include<vector>
 3 #include<queue>
 4 #include<algorithm>
 5 #define it register int
 6 #define il inline 
 7 using namespace std;
 8 const int N=1000005;
 9 int T,n; 
10 vector<int> g[N];
11 long long ans;
12 il void fr(int &num){
13     num=0;char c=getchar();int p=1;
14     while(c<'0'||c>'9') c=='-'?p=-1,c=getchar():c=getchar();
15     while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
16     num*=p;
17 }
18 priority_queue<int,vector<int>,greater<int> > q;
19 int main(){ 
20     fr(T);
21     while(T--){
22         fr(n),ans=0;
23         for(it i=1,x,y;i<=n;++i) fr(x),fr(y),g[x].push_back(y);//收买i要x人或者花y元
24         for(it i=n-1;i>=0;--i){//注意到一个显而易见的事实就是人数不会超过n
25             for(it j=0,sz=g[i].size();j<sz;++j) q.push(g[i][j]);
26             while(q.size()>n-i) ans+=q.top(),q.pop();//选前n-i小的人进行收买
27         }
28         printf("%I64d\n",ans);
29         for(it i=0;i<n;++i) g[i].clear();while(!q.empty()) q.pop();//多测不清空 爆零两行泪
30     }
31     return 0;
32 }
View Code

F:太迟了先咕着明早更。

 

至少前五题赶在官方题解出来之前写完了自己的题解。。我还是太菜了,还要继续磨砺吖!

有更好的做法欢迎留言哦~

おすすめ

転載: www.cnblogs.com/Kylin-xy/p/11735955.html