CD签到 H队友猜的nb,b=(n+1) 好像正解是求n2的约数
A - Rush Hour Puzzle
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
typedef long long ll;
const double INF=1e20;
const int N=1e6+5;
struct cv{
int mp[6][6];
int mov;
friend bool operator<(cv p,cv q){
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
if(p.mp[i][j]!=q.mp[i][j]) return p.mp[i][j]<q.mp[i][j];
}
}
return p.mp[0][0]<q.mp[0][0];
}
}dd,hf;
int to[4][2]={0,1,0,-1,1,0,-1,0};
int main(){
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
cin>>dd.mp[i][j];
}
}
dd.mov=0;
queue<cv> q;
q.push(dd);
set<cv> st;
st.insert(dd);
while(!q.empty()){
dd=q.front();
q.pop();
if(dd.mp[2][5]==1){
int cnt=1;
for(int i=4;i>=0;i--){
if(dd.mp[2][i]!=1){
break;
}
cnt++;
}
int ans=(dd.mov+cnt);
if(ans>10) ans=-1;
cout<<ans<<endl;
return 0;
}
if(dd.mov==10){
break;
}
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
if(dd.mp[i][j]==0){
for(int k=0;k<4;k++){
int x=i+to[k][0],y=j+to[k][1];
if(x<0||y<0||x>5||y>5||dd.mp[x][y]==0) continue;
int xx=x+to[k][0],yy=y+to[k][1];
if(xx<0||yy<0||xx>5||yy>5||dd.mp[x][y]!=dd.mp[xx][yy]) continue;
while(xx>=0&&yy>=0&&xx<=5&&yy<=5&&dd.mp[xx][yy]==dd.mp[x][y]){
xx+=to[k][0],yy+=to[k][1];
}
xx-=to[k][0],yy-=to[k][1];
hf=dd;
hf.mov++;
swap(hf.mp[i][j],hf.mp[xx][yy]);
if(!st.count(hf)){
st.insert(hf);
q.push(hf);
}
}
}
}
}
}
cout<<-1<<endl;
}
E. The League of Sequence Designers
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
typedef long long ll;
const double INF=1e20;
const int N=1e6+5;
int t;
int k,l;
int a[N];
int main(){
cin>>t;
while(t--){
cin>>k>>l;
int s=k+1999;int x=1e6;
if(l>=2000) cout<<-1<<endl;
else{
cout<<1999<<endl;
cout<<-1<<" ";
for(int i=1;i<=1998;i++){
if(s>=x){
cout<<x<<" ";
s-=x;
}else{
cout<<s<<" ";
s=0;
}
}
}
}
}
J. Automatic Control Machine
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
typedef long long ll;
const double INF=1e20;
const int N=1e6+5;
bitset<510> op[20];
int n,m;
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=0;i<m;i++){
string s;
cin>>s;
int j;
op[i].reset();
for(j=(int)s.size()-1;j>=0;j--){
int sign=s[j]-'0';
op[i][j]=sign;
}
}
int res=0x3f3f3f3f;
for(int i=0;i<1<<m;i++){
int temp=0;
bitset<510> ans;
ans.reset();
for(int j=0;j<m;j++){
if(i>>j&1){
ans|=op[j];
temp++;
}
}
int flag=0;
for(int j=0;j<n;j++){
if(ans[j]==0){
flag=1;
break;
}
}
if(!flag){
res=min(res,temp);
}
}
if(res==0x3f3f3f3f) cout<<-1<<endl;
else cout<<res<<endl;
}
}
K. Length of Bundle Rope
1.题意:
2.题解:
哈夫曼
3.ac代码:
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
typedef long long ll;
const double INF=1e20;
const int N=1e6+5;
bitset<510> op[20];
int n,m;
int a[N];
int main(){
int t;
cin>>t;
while(t--){
cin>>n;
priority_queue<int,vector<int>,greater<int>> q;
for(int i=0;i<n;i++) {
cin>>a[i];
q.push(a[i]);
}
int ans=0;
while(q.size()!=1){
int a=q.top();q.pop();
int b=q.top();q.pop();
int c=a+b;
ans+=c;
q.push(c);
}
cout<<ans<<endl;
}
}
|