1.玩具谜题(toy)
洛谷P1563
算法:模拟
无其他算法(水题 )
我的代码
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int direct;
}stu[100005];
int main(){
string answer;
int z,people,dangqian=1;
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>stu[i].direct;
cin>>stu[i].name;
}
for(int i=1;i<=m;i++){
cin>>z>>people;
if(z==0){
if(stu[dangqian].direct==0)
if(dangqian-people<0)
dangqian=n+dangqian-people;
else
dangqian-=people;
else
if(dangqian+people>n)
dangqian=people+dangqian-n;
else
dangqian=dangqian+people;
}
if(z==1){
if(stu[dangqian].direct==0)
if(dangqian+people>n)
dangqian=people+dangqian-n;
else
dangqian=dangqian+people;
else
if(dangqian-people<0)
dangqian=n+dangqian-people;
else
dangqian-=people;
}
}
for(int i=0;i<stu[dangqian].name.size();i++)
cout<<stu[dangqian].name[i];
return 0;
}
估分:100
实际得分:95
(为什么会这样,无论刷水题也好,还是暴力模拟,双份的快乐为什么会变成这样呢)
言归正传,零不在范围内(我是“sb” )
应该是
i f ( d a n g q i a n − p e o p l e < = 0 ) if(dangqian-people<=0) if(dangqian−people<=0)
改了之后轻松A了。
2.神奇的幻方(magic)
洛谷P2615
算法:又是快乐模拟
我的代码
#include<bits/stdc++.h>
using namespace std;
short a[50][50];
int main(){
int n,o=1;
cin>>n;
int hang=1,lie=n/2+1;
a[hang][lie]=1;
while(o<=n*n){
o++;
int h1=hang,l1=lie;
if(h1==1&&l1!=n){
hang=n;
lie+=1;
a[hang][lie]=o;
}
if(l1==n&&h1!=1){
lie=1;
hang-=1;
a[hang][lie]=o;
}
if(h1==1&&l1==n){
hang+=1;
a[hang][lie]=o;
}
if(h1!=1&&l1!=n){
if(a[h1-1][l1+1]==0){
hang-=1;
lie+=1;
a[hang][lie]=o;
}
else{
hang+=1;
a[hang][lie]=o;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
估分:100
实际得分:100
3.蚯蚓(earthworm)
洛谷P2827
我的代码
算法:STL(优先队列)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
queue<ll>a;queue<ll>b;queue<ll>c;
bool cmp(ll x,ll y){return x>y;}
int main()
{
ll n,m,q,u,v,t,x,y;
scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&q,&u,&v,&t);
ll ne[100005];
for(ll i=1;i<=n;i++)
{
scanf("%lld",&ne[i]);
}
sort(ne+1,ne+n+1,cmp);
for(ll i=1;i<=n;i++)
a.push(ne[i]);
for(int i=1;i<=m;i++){
ll maxn=-2147483647,f;
if(!a.empty())if(a.front()>maxn)maxn=a.front(),f=1;
if(!b.empty())if(b.front()>maxn)maxn=b.front(),f=2;
if(!c.empty())if(c.front()>maxn)maxn=c.front(),f=3;
if(f==1)a.pop();else if(f==2)b.pop();else if(f==3)c.pop();
maxn+=(i-1)*q;x=maxn*u/v;y=maxn-x;
if(!(i%t))cout<<maxn<<" ";b.push(x-i*q);c.push(y-i*q);
}
cout<<endl;
ll p=1;
while(p){
ll maxn=-2147483647,f;
if(a.empty()&&b.empty()&&c.empty())break;
if(!a.empty())if(a.front()>maxn)maxn=a.front(),f=1;
if(!b.empty())if(b.front()>maxn)maxn=b.front(),f=2;
if(!c.empty())if(c.front()>maxn)maxn=c.front(),f=3;
if(f==1)a.pop();if(f==2)b.pop();if(f==3)c.pop();
if(p%t==0)
cout<<maxn+(m)*q<<" ";
p++;
}
cout<<endl;
return 0;
}
估分:50(快乐骗分 )(vector必超时)
实际得分:45
贴个正解
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
queue<ll>a;queue<ll>b;queue<ll>c;
bool cmp(ll x,ll y){return x>y;}
int main()
{
ll n,m,q,u,v,t,x,y;
scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&q,&u,&v,&t);
ll ne[100005];
for(ll i=1;i<=n;i++)
{
scanf("%lld",&ne[i]);
}
sort(ne+1,ne+n+1,cmp);
for(ll i=1;i<=n;i++)
a.push(ne[i]);
for(int i=1;i<=m;i++){
ll maxn=-2147483647,f;
if(!a.empty())if(a.front()>maxn)maxn=a.front(),f=1;
if(!b.empty())if(b.front()>maxn)maxn=b.front(),f=2;
if(!c.empty())if(c.front()>maxn)maxn=c.front(),f=3;
if(f==1)a.pop();else if(f==2)b.pop();else if(f==3)c.pop();
maxn+=(i-1)*q;x=maxn*u/v;y=maxn-x;
if(!(i%t))cout<<maxn<<" ";b.push(x-i*q);c.push(y-i*q);
}
cout<<endl;
ll p=1;
while(p){
ll maxn=-2147483647,f;
if(a.empty()&&b.empty()&&c.empty())break;
if(!a.empty())if(a.front()>maxn)maxn=a.front(),f=1;
if(!b.empty())if(b.front()>maxn)maxn=b.front(),f=2;
if(!c.empty())if(c.front()>maxn)maxn=c.front(),f=3;
if(f==1)a.pop();if(f==2)b.pop();if(f==3)c.pop();
if(p%t==0)
cout<<maxn+(m)*q<<" ";
p++;
}
cout<<endl;
return 0;
}
4.列队(phalanx)
洛谷P3690
不多说了,都是泪
放图
我的暴力太虚了
估分:20~30
实际得分:0
正解也不贴了(摆烂了,兄弟们 )