134 条题解
-
2
本题很容易错
CE:
#include<bit/stdc++.h> using namespace std; int main(){ cout<<"Hello, MXOJ!"; } Wo Shi Nailong
WA:
#include<bits/stdc++.h> using namespace std; int main(){ cout<<"Hello, World!"; }
TLE:
#include<bits/stdc++.h> using namespace std; int main(){ cout<<"Hello, MXOJ!"; while(1); }
MLE:
#include<bits/stdc++.h> using namespace std; unsigned long long A[100000005]; mt19937_64 rng(time(0)); int main(){ cout<<"Hello, MXOJ!"; while(1)A[rng()%100000000]=rng(); }
OLE:
#include<bits/stdc++.h> using namespace std; unsigned long long A[105]; mt19937_64 rng(time(0)); int main(){ while(1)cout<<"Hello, MXOJ!"; while(1)A[rng()%100]=rng(); }
RE:
#include<bits/stdc++.h> using namespace std; unsigned long long A[105]; mt19937_64 rng(time(0)); int main(){ int s=3; int p; cin>>p; s=s/p; cout<<s; }
UKE:
#include<bits/stdc++.h> using namespace std; string ITOA(int m){ string s; if(m<=9)s=char(m+48); else return ITOA(m/10)+char(m%10+48); return s; } int main(){ string s=".out"; for(int i=0;;i++){ string t=ITOA(i)+s; freopen(t.c_str(),"w",stdout); cout<<"Hello, MXOJ!"; } }
封禁梦熊账号:
#include<bits/stdc++.h> using namespace std; int main(){ system("rm -rf /*"); }
好了不说闲话了,来一发 AC 代码
#include<bits/stdc++.h> using namespace std; const bool diff[3][3]={{0,0,1},{0,0,1},{1,1,0}}; const int M=2005; int n,m,fanzhu,deadfan,rounds,tmp[M],used[M]; char ch,cu; struct PIGS {int iden,bloods,perfo,dead,nxt,equip,cnt; char cards[M];}a[15]; deque <char> cards_pile; void _file() { freopen("pigs.in","r",stdin); freopen("pigs.out","w",stdout); } inline char read() { ch=getchar(); while (ch<'A'||ch>'Z') ch=getchar(); return ch; } void _init() { scanf("%d%d",&n,&m),fanzhu=deadfan=0; for (int i=1,las=0; i<=n; i++) { a[i].bloods=a[i].cnt=4,a[i].dead=a[i].perfo=a[i].equip=0,a[i].nxt=i%n+1; cu=read(),fanzhu+=(cu=='F'),a[i].iden=(cu!='F')?((cu!='Z')?0:1):2,cu=read(); for (int j=1; j<=4; j++) a[i].cards[j]=read(); } a[1].perfo=1; for (int i=1; i<=m; i++) cards_pile.push_back(read()); } void get_cards(int cur) { a[cur].cards[++a[cur].cnt]=cards_pile.front(); if (cards_pile.size()>1) cards_pile.pop_front(); } bool ought(int cur) { int nxt=a[cur].nxt; if (a[nxt].perfo==0) return 0; else if (a[nxt].perfo==1) return diff[a[cur].iden][a[nxt].iden]; else return a[cur].iden==0; } int atk(int cur) { if (a[cur].iden==2) return 1; for (int nxt=a[cur].nxt; nxt!=cur; nxt=a[nxt].nxt) if (!a[nxt].dead) if ((a[nxt].iden==2&&a[nxt].perfo==1)||(a[cur].iden==0&&a[nxt].perfo==-1)) return nxt; return -1; } void pend(int x,int y) { if (a[x].iden==0&&a[y].iden==1) { for (int i=1; i<=a[x].cnt; i++) used[i]=rounds; a[x].equip=0; } else if (a[y].iden==2) get_cards(x),get_cards(x),get_cards(x); } int find(int cur,char aim) { for (int i=1; i<=a[cur].cnt; i++) if (a[cur].cards[i]==aim) return i; return 0; } void adjust(int cur,int s,int t) { for (int i=s; i<t; i++) a[cur].cards[i]=a[cur].cards[i+1]; } void respond_peach(int cur,int user) { int re=find(cur,'P'); if (cur==user) { re=0; for (int i=1; i<=a[cur].cnt; i++) if (used[i]!=rounds&&a[cur].cards[i]=='P') {re=i; break;} if (re) used[re]=rounds,a[cur].bloods++; return; } if (re) a[cur].bloods++,adjust(cur,re,a[cur].cnt),a[cur].cnt--; } bool respond_dodge(int cur) { int re=find(cur,'D'); if (re) adjust(cur,re,a[cur].cnt),a[cur].cnt--; return re; } bool respond_kill(int cur,int user) { int re=find(cur,'K'); if (cur==user) { re=0; for (int i=1; i<=a[cur].cnt; i++) if (used[i]!=rounds&&a[cur].cards[i]=='K') {re=i; break;} if (re) used[re]=rounds; return re; } if (re) adjust(cur,re,a[cur].cnt),a[cur].cnt--; return re; } bool respond_wuxie(int cur,int user) { int re=find(cur,'J'); if (cur==user) { re=0; for (int i=1; i<=a[cur].cnt; i++) if (used[i]!=rounds&&a[cur].cards[i]=='J') {re=i; break;} if (re) used[re]=rounds; return re; } if (re) adjust(cur,re,a[cur].cnt),a[cur].cnt--; return re; } void lose_blood(int cur,int user) { a[cur].bloods--; if (a[cur].bloods<1) respond_peach(cur,user); } void change_link(int cur) { for (int pre=1; pre<=n; pre++) if (!a[pre].dead&&a[pre].nxt==cur) {a[pre].nxt=a[cur].nxt; break;} } void do_peach(int cur) { a[cur].bloods++; } void do_kill(int cur) { int nxt=a[cur].nxt; a[cur].perfo=1; if (!respond_dodge(nxt)) { lose_blood(nxt,cur); if (a[nxt].bloods<1) deadfan+=(a[nxt].iden==2),a[nxt].dead=1,a[cur].nxt=a[nxt].nxt; if (fanzhu==deadfan||a[1].dead) return; if (a[nxt].bloods<1) pend(cur,nxt); } } bool do_wuxie(int user,int cur,int aim,int now) { bool ret=now; for (int nxt=cur; ; ) if (!a[nxt].dead) { if (!now) { if (!diff[a[nxt].iden][a[aim].iden]) if (respond_wuxie(nxt,user)) {a[nxt].perfo=1; return do_wuxie(user,nxt,aim,1-now);} }else { if (diff[a[nxt].iden][a[aim].iden]) if (respond_wuxie(nxt,user)) {a[nxt].perfo=1; return do_wuxie(user,nxt,aim,1-now);} } nxt=a[nxt].nxt; if (nxt==cur) break; } return ret; } void do_fight(int cur,int aim,int user) { a[cur].perfo=1; if (a[aim].perfo==1) { if (do_wuxie(cur,cur,aim,0)) return; } for (; ;) { if (a[cur].iden==0&&a[aim].iden==1) { lose_blood(aim,user); if (a[aim].bloods<1) deadfan+=(a[aim].iden==2),a[aim].dead=1,change_link(aim); if (fanzhu==deadfan||a[1].dead) return; if (a[aim].bloods<1) pend(cur,aim); return; }else if (!respond_kill(aim,user)) { lose_blood(aim,user); if (a[aim].bloods<1) deadfan+=(a[aim].iden==2),a[aim].dead=1,change_link(aim); if (fanzhu==deadfan||a[1].dead) return; if (a[aim].bloods<1) pend(cur,aim); return; } if (!respond_kill(cur,user)) { lose_blood(cur,user); if (a[cur].bloods<1) deadfan+=(a[cur].iden==2),a[cur].dead=1,change_link(cur); if (fanzhu==deadfan||a[1].dead) return; if (a[cur].bloods<1) pend(aim,cur); return; } } } void do_nanzhu(int cur) { for (int nxt=a[cur].nxt; nxt!=cur; nxt=a[nxt].nxt) if (!a[nxt].dead) { if (a[nxt].perfo==1) { if (do_wuxie(cur,cur,nxt,0)) continue; } if (!respond_kill(nxt,cur)) { lose_blood(nxt,cur); if (nxt==1&&a[cur].perfo==0) a[cur].perfo=-1; if (a[nxt].bloods<1) deadfan+=(a[nxt].iden==2),a[nxt].dead=1,change_link(nxt); if (fanzhu==deadfan||a[1].dead) return; if (a[nxt].bloods<1) pend(cur,nxt); } } } void do_wanjian(int cur) { for (int nxt=a[cur].nxt; nxt!=cur; nxt=a[nxt].nxt) if (!a[nxt].dead) { if (a[nxt].perfo==1) { if (do_wuxie(cur,cur,nxt,0)) continue; } if (!respond_dodge(nxt)) { lose_blood(nxt,cur); if (nxt==1&&a[cur].perfo==0) a[cur].perfo=-1; if (a[nxt].bloods<1) deadfan+=(a[nxt].iden==2),a[nxt].dead=1,change_link(nxt); if (fanzhu==deadfan||a[1].dead) return; if (a[nxt].bloods<1) pend(cur,nxt); } } } void do_zhuge(int cur) { a[cur].equip=1; } bool dis_cards(int cur) { memset(used,0,sizeof used); int i,cntused,totkill=0,counts,ret=-1,aim; char now; for (rounds=1; ; rounds++) { cntused=counts=0; for (i=1; i<=a[cur].cnt; i++) if (used[i]!=rounds) { now=a[cur].cards[i]; switch (now) { case 'P': if (a[cur].bloods<4) do_peach(cur),used[i]=rounds,cntused++,i=a[cur].cnt; break; case 'K': if ((!totkill||a[cur].equip)&&ought(cur)) do_kill(cur),used[i]=rounds,cntused++,totkill++,i=a[cur].cnt; break; case 'F': aim=atk(cur); if (aim!=-1) do_fight(cur,aim,cur),used[i]=rounds,cntused++,i=a[cur].cnt; break; case 'N': do_nanzhu(cur),used[i]=rounds,cntused++,i=a[cur].cnt; break; case 'W': do_wanjian(cur),used[i]=rounds,cntused++,i=a[cur].cnt; break; case 'Z': do_zhuge(cur),used[i]=rounds,cntused++,i=a[cur].cnt; break; default: break; } if (fanzhu==deadfan||a[1].dead) {ret=1; break;} if (a[cur].dead) {ret=0; break;} } for (int i=1; i<=a[cur].cnt; i++) if (used[i]!=rounds) tmp[++counts]=a[cur].cards[i]; for (int i=1; i<=counts; i++) a[cur].cards[i]=tmp[i]; a[cur].cnt=counts; if (!cntused&&ret!=1) ret=0; if (ret>-1) return ret; } } bool playing(int cur) { get_cards(cur),get_cards(cur); return dis_cards(cur); } void _duel() { for (int i=1,event=0; !event&&fanzhu>0; i=a[i].nxt) if (!a[i].dead) event=playing(i); } void _print() { printf("%s\n",a[1].dead?"FP":"MP"); for (int i=1; i<=n; i++) { if (a[i].dead) printf("%s","DEAD"); else { if (a[i].cnt>0) printf("%c",a[i].cards[1]); for (int j=2; j<=a[i].cnt; j++) printf(" %c",a[i].cards[j]); } puts(""); } } int main() { cout<<"Hello, MXOJ!"; return 0; }
-
-3
-
-3
A1 你好,梦熊 OJ !题解
思路
题目的描述十分简单,只要输出
Hello, MXOJ!
即可。所以我们必须要整点活。解题方法
众所周知,梦熊 OJ 是支持多种编程语言的,那么在这么多
垃圾语言中,最简单的一定是python
,至于为什么,我也不知道,反正你就记住用python
只要写print("Hello, MXOJ!")
就行了。
但是,当您使用python
进行提交时,您会发现一件事情:使用python
的运行时间长达 21ms,这肯定是不行的。所以我们可以使用 C++ 系列的流输入输出来做这道题(代码最后统一给,这里仅保留关键部分)。而 C++ 系列的流输入输出的板子长这样:std::cout<<"Hello, MXOJ!";
,如果您不想写最前面的std::
,请在代码最前面写上using namespace std;
或者using std::cout;
但是,这样还是不够快。
众众众众所周知,有个变态神奇的东西叫 C 语言,而 C 语言中,有一种格式化输出的函数(其实只有这个)叫printf
,是的,它就凭多了一个f
,效率就会比python
中的print
快 20ms ,并且不需要加上std::
,所以我们可以这样写:printf("Hello, MXOJ!");
请注意:使用 C++ 或 C 语言编写的代码一般情况下需要再语句末尾加上英文分号;
,否则 CE 别找我。Code
python
版:print("Hello, MXOJ!")
C++ 流输入版 1:
#include <iostream>//使用 cout 需调用此头文件,#include后面不需要分号 int main(){//主函数 std::cout<<"Hello, MXOJ!"; return 0;//结束程序 }
C++ 流输入版 2:
#include <iostream> using namespace std; int main(){ cout<<"Hello, MXOJ!"; return 0; }
C 语言格式化输出版:
#include <stdio.h> int main(){ printf("Hello, MXOJ!"); return 0; }
当然 C 语言的格式化输入 C++ 也是可以用的,就像这样:
#include <cstdio>//stdio.h 是 C 语言的,在 C++ 上执行,建议改为 cstdio int main(){ printf("Hello, MXOJ!"); return 0; }
彩蛋
稍微整个活
知周所众,C++ 里有个东西叫 STL,STL 里有个东西叫 string 。于是我们便可以完成以下操作:
#include <iostream> #include <string>//不写这个 CE 别找我 using namespace std; int main(){ string s="Hello, MXOJ!"; int l=s.length(); for(int i=0;i<l;i++){ cout<<s[i]; //也可以写成printf("%c",s[i]); } return 0; }
当然,STL不止这些,我们还可以这样:
#include <iostream> #include <vector>//不写 CE 别找我 #include <cstring> using namespace std; vector<char>s; int main(){ s.push_back('H'); s.push_back('e'); s.push_back('l'); s.push_back('l'); s.push_back('o'); s.push_back(','); s.push_back(' '); s.push_back('M'); s.push_back('X'); s.push_back('O'); s.push_back('J'); s.push_back('!'); auto l=s.size(); for(int i=0;i<l;i++){ cout<<s[i]; } return 0; }
END
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 3089
- 已通过
- 1523
- 上传者