1、奶酪(cheese)
算法:我最开始是深搜。由于找哪儿叉掉了导致没剪枝.jpg
代码
#include<bits/stdc++.h>
using namespace std;
int a[1001][3],n,h,r;
bool b[1001][1001];
double dist(int x1,int y1,int z1,int x2,int y2,int z2){
double d=sqrt(pow((x1-x2),2)+pow((y1-y2),2)+pow((z1-z2),2));
return d;
}
bool check(){
bool v[1001];
memset(v,0,sizeof(v));
int k[1000],jk=0,nk;
while(true){
bool flag=true;
for(int i=1;i<=n;i++){
if(a[i][2]<=r&&(!v[i])){
k[0]=i;
v[i]=true;
flag=false;
break;
}
}
if(flag) return false;
nk=k[jk];
while(true){
if(a[nk][2]+r>=h) return true;
for(int i=1;i<=n;i++){
if(b[nk][i]&&(!v[i])){
k[jk]=nk;
jk++;
v[i]=true;
nk=i;
break;
}
}
if(nk==k[jk]){
jk--;
nk=k[jk];
}
if(jk==-1) break;
}
}
return true;
}
int main(){
int T;
scanf("%d",&T);
for(int i=1;i<=T;i++){
scanf("%d%d%d",&n,&h,&r);
//memset(a[1000],0,sizeof(a[1000]));
//memset(b[1000],0,sizeof(b[1000]));
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)
b[j][k]=false;
for(int k=0;k<=2;k++)
a[j][k]=0;
}
for(int j=1;j<=n;j++){
scanf("%d%d%d",&a[j][0],&a[j][1],&a[j][2]);
for(int k=1;k<j;k++){
double d=dist(a[k][0],a[k][1],a[k][2],a[j][0],a[j][1],a[j][2]);
if(d<=double(2*r)){
b[j][k]=true;
b[k][j]=true;
}
}
}
bool flag=check();
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
又臭又长。
估分:40不到。
实际得分:30(什么,我估的还蛮准得嘛。。。)
改善思路: 宽搜;并查集;剪枝。
2、时间复杂度(complexity)
算法:没什么算法,莽就完了。
代码(0分未校对)
#include<bits/stdc++.h>
using namespace std;
int l,w,sum,fzd,cw,step;
set<char> bl;
int main(){
int t;
char a[10];
scanf("%d",&t);
for(int i=1;i<=t;i++){
w=0;
cw=0;
sum=0;
step=0;
bl.clear();
bool flag=true,con=true,one=false;
scanf("%d%c%c%c%c",&l,&a[9],&a[0],&a[1],&a[2]);
if(a[2]=='1') scanf("%c%c",&a[3],&a[9]);
else
scanf("%c%d%c%c",&a[4],&w,&a[5],&a[9]);
for(int j=1;j<=l;j++){
scanf("%c%c",&a[0],&a[9]);
if(a[0]=='E'){
con=true;
if(sum==0) flag=false;
sum--;
step--;
}
if(a[0]=='F'){
sum++;
scanf("%c%c%c%c%c%c",&a[1],&a[8],&a[2],&a[7],&a[3],&a[6]);
if(!con) continue;
if(bl.count(a[1])) flag=false;
else bl.insert(a[1]);
if(a[2]=='n'&&a[3]!='n'){
con=false;
one=true;
continue;
}
if(a[2]!='n'&&a[3]=='n'){
step++;
cw=step;
}
if(a[2]!='n'&&a[3]!='n'||a[2]=='n'&&a[3]=='n') one=true;
}
}
if(!flag||sum!=0) printf("ERR\n");
else{
if(cw==w&&(w!=0||one)) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
估分:0分。
实际不用说了。
稍加改良的逊版 代码(36分)
#include<bits/stdc++.h>
using namespace std;
int l,w,sum,fzd,cw,step;
deque<char> bl;
deque<char>::iterator it;
int main(){
int t;
char a[10];
string str1,str2;
scanf("%d",&t);
for(int i=1;i<=t;i++){
w=0;
cw=0;
sum=0;
step=0;
bl.clear();
memset(a,0,sizeof(a));
bool flag=true,con=true,one=false,fa=false;
cin>>l>>a[0]>>a[1]>>a[2];
if(a[2]=='1') cin>>a[3];
else
cin>>a[4]>>w>>a[5];
for(int j=1;j<=l;j++){
cin>>a[0];
if(a[0]=='E'){
con=true;
if(sum==0) flag=false;
sum--;
step--;
bl.pop_back();
}
if(a[0]=='F'){
sum++;
cin>>a[1]>>str1>>str2;
if(!con) continue;
for(it=bl.begin();it!=bl.end();it++){
if(a[1]==*it){
fa=true;
break;
}
}
if(fa) flag=false;
else bl.push_back(a[1]);
if(str1[0]=='n'&&str2[0]!='n'){
con=false;
one=true;
continue;
}
if(str1[0]!='n'&&str2[0]=='n'){
step++;
cw=max(cw,step);
}
if(str1[0]!='n'&&str2[0]!='n'||str1[0]=='n'&&str2[0]=='n') one=true;
}
}
if(!flag||sum!=0) printf("ERR\n");
else{
if(cw==w&&(w!=0||one)) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
3、换教室(classroom)
没写……(你在干什么啊!ZJH)
思路:图论,dp
4、斗地主
算法:每日一个骗分小技巧。不是
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[5],t,n,step,r;
cin>>t>>n;
for(int i=1;i<=t;i++){
if(n==2){
scanf("%d%d%d%d",&a[0],&a[4],&a[1],&a[3]);
if(a[0]==a[1]) step=1;
else step=2;
}
else if(n==3){
for(int i=0;i<n;i++)
scanf("%d%d",&a[i],&r);
if(a[0]==a[1]&&a[1]==a[2]) step=1;
else if(a[0]==a[1]||a[1]==a[2]) step=2;
else step=3;
}
else if(n==4){
for(int i=0;i<n;i++)
scanf("%d%d",&a[i],&r);
if(a[0]==a[1]&&a[1]==a[2]||a[1]==a[2]&&a[2]==a[3]||a[0]==a[1]&&a[0]==a[3])
step=1;
else if(a[0]==a[1]&&a[2]==a[3]||a[0]==a[2]&&a[1]==a[3]||a[0]==a[3]&&a[1]==a[2])
step=2;
else if(a[0]==a[1]||a[0]==a[2]||a[0]==a[3]||a[1]==a[2]||a[1]==a[3]||a[2]==a[3])
step=3;
else step=4;
}
cout<<step<<endl;
}
return 0;
}
估分:30分。
实际得分:20分。
JOJO, 在短暂的码农生涯中,我明白了一件事,人们越是追求完美算法,就越容易犯错。除非,超越算法本身。
你在说什么?
我要写暴力了!!!~~JOJO。~~我要开始骗分!!!
玩梗.jpg