Codeforces Beta Round #3

Codeforces Beta Round #3

http://codeforces.com/contest/3

A

找规律题。但我懒得找,直接暴搜

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10 
11 int book[15][15];
12 struct sair{
13     string str[105];
14     int co;
15     int x,y;
16 };
17 
18 int dir[8][2]={0,1,1,0,0,-1,-1,0,1,1,-1,-1,1,-1,-1,1};
19 string D[8]={"R","D","L","U","RD","LU","LD","RU"};
20 
21 sair bfs(sair s){
22     queue<sair>Q;
23     Q.push(s);
24     sair e;
25     while(!Q.empty()){
26         s=Q.front();
27         Q.pop();
28         for(int i=0;i<8;i++){
29             e=s;
30             e.x=s.x+dir[i][0];
31             e.y=s.y+dir[i][1];
32             if(e.x>=0&&e.x<8&&e.y>=0&&e.y<8&&book[e.x][e.y]!=1){
33                 e.str[e.co]=D[i];
34                 e.co++;
35                 Q.push(e);
36                 if(book[e.x][e.y]==2){
37                     return e;
38                 }
39                 book[e.x][e.y]=1;
40             }
41         }
42     }
43 }
44 
45 int main(){
46     #ifndef ONLINE_JUDGE
47         freopen("1.txt","r",stdin);
48     #endif
49     string str,str1;
50     cin>>str;
51     sair s;
52     book[7-(str[1]-'1')][str[0]-'a']=1;
53     s.y=str[0]-'a',s.x=7-(str[1]-'1'),s.co=0;
54     cin>>str1;
55     book[7-(str1[1]-'1')][str1[0]-'a']=2;
56     if(str==str1) {cout<<0<<endl;return 0;}
57     s=bfs(s);
58     cout<<s.co<<endl;
59     for(int i=0;i<s.co;i++){
60         cout<<s.str[i]<<endl;
61     }
62 }
View Code

 

B

贪心题

因为体积只有1和2两种,所以每次选单位价值最大的物品。需要注意最后容量剩一个的情况,这时候需要对比是选一个好还是把容量为1的物品删去一个再添加一个容量为2的物品好

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10 
11 string str;
12 vector<pair<ll,int> >one,two;
13 
14 bool cmp(pair<ll,int>a,pair<ll,int>b){
15     if(a.first==b.first) return a.second<b.second;
16     return a.first>b.first;
17 }
18 
19 int main(){
20     #ifndef ONLINE_JUDGE
21         freopen("1.txt","r",stdin);
22     #endif
23     ll n,m;
24     cin>>n>>m;
25     int v;
26     ll val;
27     for(int i=1;i<=n;i++){
28         cin>>v>>val;
29         if(v==1){
30             one.push_back(make_pair(val,i));
31         }
32         else{
33             two.push_back(make_pair(val,i));
34         }
35     }
36     sort(one.begin(),one.end(),cmp);
37     sort(two.begin(),two.end(),cmp);
38     int pos1=0,pos2=0;
39     ll ans=0;
40     while(pos1<one.size()||pos2<two.size()){
41       //  cout<<pos1<<" "<<pos2<<endl;
42         if(m>=2){
43             if((two[pos2].first/2)>=one[pos1].first&&pos2<two.size()){
44                 ans+=two[pos2].first;
45                 pos2++;
46                 m-=2;
47             }
48             else if(one.size()>pos1){
49                 ans+=one[pos1].first;
50                 pos1++;
51                 m-=1;
52             }
53             else{
54                 ans+=two[pos2].first;
55                 pos2++;
56                 m-=2;
57             }
58         }
59         else if(m==1){
60             if(pos2==two.size()){ans+=one[pos1].first;pos1++;}
61             else if(pos1==one.size()){
62                 if(pos1==0)
63                     break;
64                 else{
65                     pos1--;
66                     ans-=one[pos1].first;
67                     ans+=two[pos2].first;
68                     pos2++;
69                 }
70             }
71             else if(two[pos2].first>one[pos1-1].first+one[pos1].first){
72                 ans-=one[pos1-1].first;
73                 pos1--;
74                 ans+=two[pos2].first;
75                 pos2++;
76             }
77             else{
78                 ans+=one[pos1].first;
79                 pos1++;
80             }
81             m--;
82         }
83         else if(m==0) break;
84     }
85     cout<<ans<<endl;
86     vector<int>pos;
87     for(int i=0;i<pos1;i++) pos.push_back(one[i].second);
88     for(int i=0;i<pos2;i++) pos.push_back(two[i].second);
89     sort(pos.begin(),pos.end());
90     for(int i=0;i<pos.size();i++){
91         cout<<pos[i]<<" ";
92     }
93     cout<<endl;
94 }
View Code

 

C

井子棋

模拟判断各种情况就好

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10 
11 string str[3];
12 
13 int Check(){
14     int cha=0,quan=0;
15     if(str[0][0]==str[0][1]&&str[0][1]==str[0][2]&&str[0][0]=='X') cha=1;
16     if(str[1][0]==str[1][1]&&str[1][1]==str[1][2]&&str[1][0]=='X') cha=1;
17     if(str[2][0]==str[2][1]&&str[2][1]==str[2][2]&&str[2][0]=='X') cha=1;
18     if(str[0][0]==str[1][1]&&str[1][1]==str[2][2]&&str[0][0]=='X') cha=1;
19     if(str[0][0]==str[1][0]&&str[1][0]==str[2][0]&&str[0][0]=='X') cha=1;
20     if(str[0][1]==str[1][1]&&str[1][1]==str[2][1]&&str[0][1]=='X') cha=1;
21     if(str[0][2]==str[1][2]&&str[1][2]==str[2][2]&&str[0][2]=='X') cha=1;
22     if(str[0][2]==str[1][1]&&str[1][1]==str[2][0]&&str[0][2]=='X') cha=1;
23 
24     if(str[0][0]==str[0][1]&&str[0][1]==str[0][2]&&str[0][0]=='0') quan=1;
25     if(str[1][0]==str[1][1]&&str[1][1]==str[1][2]&&str[1][0]=='0') quan=1;
26     if(str[2][0]==str[2][1]&&str[2][1]==str[2][2]&&str[2][0]=='0') quan=1;
27     if(str[0][0]==str[1][1]&&str[1][1]==str[2][2]&&str[0][0]=='0') quan=1;
28     if(str[0][0]==str[1][0]&&str[1][0]==str[2][0]&&str[0][0]=='0') quan=1;
29     if(str[0][1]==str[1][1]&&str[1][1]==str[2][1]&&str[0][1]=='0') quan=1;
30     if(str[0][2]==str[1][2]&&str[1][2]==str[2][2]&&str[0][2]=='0') quan=1;
31     if(str[0][2]==str[1][1]&&str[1][1]==str[2][0]&&str[0][2]=='0') quan=1;
32     if(quan&&cha) return -1;
33     if(cha) return 1;
34     if(quan) return 2;
35     return 0;
36 }
37 
38 int main(){
39     #ifndef ONLINE_JUDGE
40        // freopen("1.txt","r",stdin);
41     #endif
42     ///first second illegal the first player won the second player won  draw
43     for(int i=0;i<3;i++) cin>>str[i];
44     int cha=0,quan=0;
45     for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(str[i][j]=='X') cha++; else if(str[i][j]=='0') quan++;
46     if(abs(quan-cha)>=2||quan>cha) cout<<"illegal"<<endl;
47     else{
48         int tmp=Check();
49         if(tmp==-1) cout<<"illegal"<<endl;
50         else if(tmp==1) if(cha>quan) cout<<"the first player won"<<endl;else cout<<"illegal"<<endl;
51         else if(tmp==2) if(quan==cha) cout<<"the second player won"<<endl;else cout<<"illegal"<<endl;
52         else{
53             if(quan+cha==9){
54                 cout<<"draw"<<endl;
55             }
56             else if(cha>quan) cout<<"second"<<endl;
57             else if(cha==quan) cout<<"first"<<endl;
58         }
59     }
60 }
View Code

 

D

括号匹配

个人感觉是道好题

先把所有的“?”变成“)”,然后当num<0时,把前面的右括号变成左括号,变的原则是b-a的最大值,最后判断是否括号匹配

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10 struct sair{
11     ll a,b;
12     int pos;
13     bool operator<(const sair&bb)const{
14         return (b-a)<(bb.b-bb.a);
15     }
16 };
17 
18 int main(){
19     #ifndef ONLINE_JUDGE
20         freopen("1.txt","r",stdin);
21     #endif
22     string str;
23     cin>>str;
24     ll a,b,ans=0;
25     priority_queue<sair>Q;
26     sair tmp;
27     int num=0;
28     for(int i=0;i<str.length();i++){
29         if(str[i]=='('){
30             num++;
31         }
32         else if(str[i]==')'){
33             num--;
34         }
35         else{
36             cin>>a>>b;
37             tmp.a=a,tmp.b=b,tmp.pos=i;
38             Q.push(tmp);
39             ans+=b;
40             str[i]=')';
41             num--;
42         }
43         while(num<0){
44             if(Q.size()){
45                 ans-=Q.top().b-Q.top().a;
46                 str[Q.top().pos]='(';
47                 Q.pop();
48                 num+=2;
49             }
50             else{
51                 num=-0x3f3f3f3f;
52                 break;
53             }
54         }
55     }
56     if(num!=0) cout<<-1<<endl;
57     else{
58         cout<<ans<<endl;
59         cout<<str<<endl;
60     }
61 }
View Code

 

posted on 2019-01-30 19:06  Fighting_sh  阅读(182)  评论(0编辑  收藏  举报

导航