模拟题要耐心

CSUST 我爱三国杀
按照条件模拟吧 细心加耐心

#include<bits/stdc++.h>
#include<stdlib.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include <cstdio>
#include <iostream>
#include <vector>
#define ll int
#define inf 0x3f3f3f3f
#define mods 1000000007
#define modd 998244353
#define PI acos(-1)
#define fi first
#define se second
#define lowbit(x) (x&(-x))
#define mp make_pair
#define pb push_back
#define si size()
#define E exp(1.0)
#define fixed cout.setf(ios::fixed)
#define fixeds(x) setprecision(x)
#define IOS ios::sync_with_stdio(false);cin.tie(0)
 using namespace std;
int vis=0,wa=1,it;
int n;
struct per{
char op; //牌
char num; //  点数
}p[550];
set<ll>sac;
set<ll>swa;
struct student{
int nums; //闪
int jgm;

int fym;
int numa;//杀
int hp;
int flag; //濒死判定标记
}py[3];
void mopai(ll x,ll y){

 if(p[x].op=='s'){
  py[vis].nums++;
 }
  if(p[x].op=='a'){
  py[vis].numa++;
 }
  if(p[x].op=='+'){
  py[vis].fym++;
 }
  if(p[x].op=='-'){
  py[vis].jgm++;
 }

  if(p[y].op=='s'){
  py[vis].nums++;
 }
  if(p[y].op=='a'){
  py[vis].numa++;
 }
  if(p[y].op=='+'){
  py[vis].fym++;
 }
  if(p[y].op=='-'){
  py[vis].jgm++;
 }

}
// 当前进攻方     被进攻方
ll check(ll ac,ll wa){   //正规
int caijue;
if(py[ac].numa>0){
//有杀

 if((py[wa].fym==0)||(py[wa].fym>0&&py[ac].jgm>0)){
 py[wa].flag++;  //濒死标记
 }
}
if(py[wa].flag!=0){
//判断死不死
it++;
n--;
if(n==0){
    return 2 ; //平局
}
caijue=p[it].num-'0';
if(swa.find(caijue)!=swa.end()){
 return 0; //  ac 获胜
}
if(swa.find(caijue)==swa.end()){
      swa.insert(caijue);
}
}
return 1; //安然
}


ll checkp(ll ac,ll wa){   //正规
int caijue;
if(py[ac].numa>0){
//有杀

 if((py[wa].fym==0)||(py[wa].fym>0&&py[ac].jgm>0)){
 py[wa].flag++;  //濒死标记
 }
}
if(py[wa].flag!=0){
//判断死不死
it++;
n--;
if(n==0){
    return 2 ; //平局
}
caijue=p[it].num-'0';
if(sac.find(caijue)!=sac.end()){
 return 0; //  ac 获胜
}
if(sac.find(caijue)==sac.end()){
      sac.insert(caijue);
}
}
return 1; //安然
}
void f(){
for(int i=0;i<=1;i++){
    py[i].flag=0;
    py[i].fym=0;
    py[i].jgm=0;
py[i].hp=0;
  py[i].numa=0;
}

}

void fft(){
for(int i=0;i<=1;i++){
    py[i].flag=0;
  //py[i].fym=0;
 // py[i].jgm=0;
  py[i].hp=0;
  py[i].numa=0;
}

}

int main(){
char ca,cc;
int a,b;
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>p[i].op;
}
for(int i=1;i<=n;i++){
cin>>p[i].num;
}
f();
scanf("%d",&a);
scanf("%d",&b);
sac.insert(a);
swa.insert(b);

it=0;
while(n>0){

if(n-1==0||n-2==0){  //牌摸完了
printf("ping\n");
break;
}
mopai(it+1,it+2); //摸牌
it=it+2;
n=n-2;
if(vis==0){
  int flagr=check(vis,wa);
  if(flagr==0){

    printf("win\n");
    return 0;
  }

  if(flagr==2){
    printf("ping\n");
    return 0;
  }
}

if(vis==1){
  int flagr=checkp(vis,wa);
  if(flagr==0){
    printf("lose\n");
    return 0;
  }

  if(flagr==2){
    printf("ping\n");
    return 0;
  }
}

 fft();
 vis=(vis+1)%2;
 wa=(wa+1)%2;
}

return 0;
}

CSUST 座位预定
飞机座位的安排 - - 细心模拟 慢慢搞吧 我也就搞了很久而已

#include<bits/stdc++.h>
#include<stdlib.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include <cstdio>
#include <iostream>
#include <vector>
#define ll long long
#define inf 0x3f3f3f3f
#define mods 1000000007
#define modd 998244353
#define PI acos(-1)
#define fi first
#define se second
#define lowbit(x) (x&(-x))
#define mp make_pair
#define pb push_back
#define si size()
#define E exp(1.0)
#define fixed cout.setf(ios::fixed)
#define fixeds(x) setprecision(x)
#define IOS ios::sync_with_stdio(false);cin.tie(0)
 using namespace std;
 ll gcd(ll a,ll b){if(a<0)a=-a;if(b<0)b=-b;return b==0?a:gcd(b,a%b);}
template<typename T>void read(T &res){bool flag=false;char ch;while(!isdigit(ch=getchar()))(ch=='-')&&(flag=true);
for(res=ch-48;isdigit(ch=getchar());res=(res<<1)+(res<<3)+ch - 48);flag&&(res=-res);}
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
ll qp(ll a,ll b,ll mod){ll ans=1;if(b==0){return ans%mod;}while(b){if(b%2==1){b--;ans=ans*a%mod;}a=a*a%mod;b=b/2;}return ans%mod;}//快速幂%
ll qpn(ll a,ll b, ll p){ll ans = 1;a%=p;while(b){if(b&1){ans = (ans*a)%p;--b;}a =(a*a)%p;b >>= 1;}return ans%p;}//逆元   (分子*qp(分母,mod-2,mod))%mod;
ll r,n;
struct per{
ll f; //舒适度
char op;
}flagt[200][35];
ll Lf=0,Rf=0;
ll checkp(){
ll sr=0; //  r+2
ll srr=0; // r/2+3
ll r2=2;
ll r3=r/2+3;
for(int i=1;i<=11;i++){
  if(flagt[r2][i].op=='-'){
    sr++;
    //空座
  }
 if(flagt[r3][i].op=='-'){
    srr++;
 }

}   //计算安全排空座完毕
//printf("QAQ  %lld %lld\n",sr,srr);
if(sr==srr&&srr==0){
    return -1;  //不合适
}
if(sr>srr){
return r2;
}
if(sr<srr){return  r3 ; }

//  以下是相等而且不为0
return r2;
}
ll sum[100];
ll cnt[100];
ll pos[100];
ll cnm;
ll num;
ll checkvi(){
num=0;
cnm=99999;
memset(sum,0,sizeof(sum));
memset(cnt,0,sizeof(cnt));
memset(pos,0,sizeof(pos));
ll maxx=-1;
ll mimm=1000;
ll r1=1;
ll r2=r/2+2;
ll r3=r+3;
for(int i=1;i<=r+3;i++){
 if(i==1||i==(r/2+2)||i==r+3){
   sum[i]=99999;
    continue;
 //安全排  不再查询
 }
 if(i==2||i==(r/2+3)){
    sum[i]=99999;
    continue;
 }


 for(int j=1;j<=11;j++){
  if(flagt[i][j].op=='-'){
    sum[i]++;

  }

 }
  maxx=max(maxx,sum[i]); //空座最大值
}
for(int i=1;i<=r+3;i++){
     if(i==1||i==(r/2+2)||i==r+3){
    continue;
 //安全排  不再查询
 }
  if(i==2||i==(r/2+3)){
   // sum[i]=99999;
    continue;
 }
    if(sum[i]==maxx){
    num++;
    cnt[num]=i; //标记空座最多的排
    pos[num]=i;  //真实下标排
    }
}
if(num==1){
 //空排max唯一
 return cnt[1];
}
for(int i=1;i<=num;i++){

ll a,b,c;
a=abs(cnt[i]-r1);
b=abs(cnt[i]-r2);
c=abs(cnt[i]-r3);
cnt[i]=min(a,min(b,c));
mimm=min(mimm,cnt[i]); //最近的安全排

}
for(int i=1;i<=num;i++){
  if(mimm==cnt[i]){
  cnm=min(pos[i],cnm);

  }
//从排小的到排大的  存
}
return cnm;
}
ll checkrow(ll p){

ll F=-1; //飞机炫的人数
for(int i=1;i<=11;i++){


if(flagt[p][i].op=='-'){
 //可以选择的空位
 F=max(F,flagt[p][i].f); //求出当前可以拿到的  fmax

}


}

//printf("W %lld\n",F);
if(F==5){
if(flagt[p][5].op=='-'&&flagt[p][7].op!='-'){
    return 5;
}
 if(flagt[p][5].op!='-'&&flagt[p][7].op=='-'){
    return 7;
}
if(flagt[p][5].op=='-'&&flagt[p][7].op=='-'){
if(Lf>Rf){
  return 7;

}
else{
    return 5;
}
}
}

if(F==4){
if(flagt[p][3].op=='-'&&flagt[p][9].op!='-'){
    return 3;
}
 if(flagt[p][3].op!='-'&&flagt[p][9].op=='-'){
    return 9;
}
if(flagt[p][3].op=='-'&&flagt[p][9].op=='-'){
if(Lf>Rf){
  return 9;

}
else{
    return 3;
}
}
}

if(F==3){
if(flagt[p][1].op=='-'&&flagt[p][11].op!='-'){
    return 1;
}
 if(flagt[p][1].op!='-'&&flagt[p][11].op=='-'){
    return 11;
}
if(flagt[p][1].op=='-'&&flagt[p][11].op=='-'){
if(Lf>Rf){
  return 11;

}
else{
    return 1;
}
}
}

if(F==2){
return 6;

}
if(F==1){
if(flagt[p][2].op=='-'&&flagt[p][10].op!='-'){
    return 2;
}
 if(flagt[p][2].op!='-'&&flagt[p][10].op=='-'){
    return 10;
}
if(flagt[p][2].op=='-'&&flagt[p][10].op=='-'){
if(Lf>Rf){
  return 10;

}
else{
    return 2;
}
}
}

}

int main(){
ll t;
read(t);
ll ok=0;
while(t--){
ok++;
read(r);
read(n);
Lf=0;
Rf=0;
for(int i=1;i<=r+3;i++){
    for(int j=1;j<=11;j++){
        flagt[i][j].f=0;
        flagt[i][j].op='\0';
    }
}

for(int i=1;i<=r+3;i++){
for(int j=1;j<=11;j++){
  cin>>flagt[i][j].op;
 if(flagt[i][j].op=='#'){

  if(j<=5){
    Lf++;
  }
  if(j>=7){
    Rf++;
  }

 }
 if(flagt[i][j].op=='-'){
    if(j==5||j==7){
      flagt[i][j].f=5;
    }
   if(j==3||j==9){
    flagt[i][j].f=4;
   }
 if(j==1||j==11){
    flagt[i][j].f=3;
 }
 if(j==6){
    flagt[i][j].f=2;
 }
 if(j==2||j==10){
    flagt[i][j].f=1;
 }
 }
}
}

for(int i=1;i<=n;i++){
 //查询普通排
 ll ss='a'+i-1;

ll ro;//列
ll p=checkp();  //查询安全排
if(p==-1){
p=checkvi(); //返回普通排的  牌号
// p  作为合法最优排
}
ro=checkrow(p); //  BUG

if(ro<=5){
    Lf++;
}
if(ro>=7){
    Rf++;
}
flagt[p][ro].op=ss;

}


printf("Case #%lld:\n",ok);

for(int i=1;i<=r+3;i++){
    for(int j=1;j<=11;j++){
     printf("%c",flagt[i][j].op);
    }
printf("\n");
}


}

}
Share 

啥都不会,我自闭了,我他妈太菜了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值