10 solutions

  • 17
    @ 2025-8-4 16:37:22

    这题非常难,其他的两篇题解使用了cout或者printf的高级算法,这里介绍一个基础的做法——手搓 64 位 0.5MB 内存的机器码虚拟机。

    这是虚拟机框架:

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define ull unsigned int
    #define N 65536
    int memory[N];
    ull code[N] = {
    
    };
    /*
    0 Input
    1 Output
    2 Write
    3 Copy
    4 Calculate (& | ~ ^ << >>)
    5 Calculate (+ - * / %)
    6 Goto
    7 If-goto
    8 x++
    9 x--
    f Exit
    */
    signed main()
    {
    	for(int i=0;;i=(i+1)%N)
    	{
    		int op=code[i]>>60;
    		if(op==0)		//Input
    		{
    			int p=code[i]&65535;
    			cin >> memory[ (code[i]>>56)&1 ? memory[p] : p ];
    		}
    		else if(op==1)	//Output
    		{
    			int p=code[i]&65535, val = memory[ (code[i]>>56)&1 ? memory[p] : p ];
    			if((code[i]>>57)&1)
    			{
    				cout<<char(val&127);
    			}
    			else
    			{
    				cout<<val;
    			}
    		}
    		else if(op==2)	//Write
    		{
    			int p = (code[i]>>32)&65535, val = code[i]&((1ll<<32)-1);
    			memory[ (code[i]>>56)&1 ? memory[p] : p ] = val;
    		}
    		else if(op==3)	//Copy
    		{
    			int pf = (code[i]>>16)&65535, pt = code[i]&65535;
    			int val = memory[ (code[i]>>55)&1 ? memory[pf] : pf ];
    			memory[ (code[i]>>56)&1 ? memory[pt] : pt ] = val;
    		}
    		else if(op==4)	//Calculate (& | ~ ^ << >>)
    		{
    			int p1 = (code[i]>>32)&65535, p2 = (code[i]>>16)&65535, p3 = code[i]&65535;
    			int val1 = memory[ (code[i]>>58)&1 ? memory[p1] : p1 ],
    			val2 = memory[ (code[i]>>57)&1 ? memory[p2] : p2 ], val3;
    			int op2 = (code[i]>>52)&15;
    			if(op2==0)
    			{
    				val3=val1&val2;
    			}
    			else if(op2==1)
    			{
    				val3=val1|val2;
    			}
    			else if(op2==2)
    			{
    				val3=~val2;
    			}
    			else if(op2==3)
    			{
    				val3=val1^val2;
    			}
    			else if(op2==4)
    			{
    				val3=((val2>>6)?0:val1<<val2);
    			}
    			else
    			{
    				val3=((val2>>6)?0:val1>>val2);
    			}
    			memory[ (code[i]>>56)&1 ? memory[p3] : p3 ] = val3;
    		}
    		else if(op==5)	//Calculate (+ - * / %)
    		{
    			//想要乘方的建议自己写一个快速幂, 应该是能写的 
    			int p1 = (code[i]>>32)&65535, p2 = (code[i]>>16)&65535, p3 = code[i]&65535;
    			int val1 = memory[ (code[i]>>58)&1 ? memory[p1] : p1 ],
    			val2 = memory[ (code[i]>>57)&1 ? memory[p2] : p2 ], val3;
    			int op2 = (code[i]>>52)&15;
    			if(op2==0)
    			{
    				val3=val1+val2;
    			}
    			else if(op2==1)
    			{
    				val3=val1-val2;
    			}
    			else if(op2==2)
    			{
    				val3=val1*val2;
    			}
    			else if(op2==3)
    			{
    				val3=(val2?val1/val2:0);
    			}
    			else
    			{
    				val3=(val2?val1%val2:0);
    			}
    			memory[ (code[i]>>56)&1 ? memory[p3] : p3 ] = val3;
    		}
    		else if(op==6)	//Goto
    		{
    			int p=code[i]&65535;
    			i = (code[i]>>56)&1 ? memory[p] : p;
    			i = (i+N-1)%N;
    		}
    		else if(op==7)	//If-goto (> < == >= <= !=)
    		{
    			int p1 = (code[i]>>32)&65535, p2 = (code[i]>>16)&65535, p3 = code[i]&65535;
    			int val1 = memory[ (code[i]>>58)&1 ? memory[p1] : p1 ],
    			val2 = memory[ (code[i]>>57)&1 ? memory[p2] : p2 ];
    			int op2 = (code[i]>>52)&15;
    			bool flag;
    			if(op2==0)
    			{
    				flag=(val1>val2);
    			}
    			else if(op2==1)
    			{
    				flag=(val1<val2);
    			}
    			else if(op2==2)
    			{
    				flag=(val1==val2);
    			}
    			else if(op2==3)
    			{
    				flag=(val1>=val2);
    			}
    			else if(op2==4)
    			{
    				flag=(val1<=val2);
    			}
    			else
    			{
    				flag=(val1!=val2);
    			}
    			if(flag)
    			{
    				i = (code[i]>>56)&1 ? memory[p3] : p3;
    				i = (i+N-1)%N;
    			}
    		}
    		else if(op==8)	//x++
    		{
    			int p=code[i]&65535;
    			memory[ (code[i]>>56)&1 ? memory[p] : p ]++;
    		}
    		else if(op==9)	//x--
    		{
    			int p=code[i]&65535;
    			memory[ (code[i]>>56)&1 ? memory[p] : p ]--;
    		}
    		else if(op==15)	//Exit
    		{
    			break;
    		}
    		else
    		{
    			cout<<"\n\nError: Invalid code\n\n";
    		}
    	}
    	return 0;
    }
    

    这是这题的实现:

    // 将其复制进代码的第 8 行即可
    0x2000000000000048, 0x1200000000000000,	//H
    0x2000000000000065, 0x1200000000000000,	//e
    0x200000000000006c, 0x1200000000000000,	//l
    0x200000000000006c, 0x1200000000000000,	//l
    0x200000000000006f, 0x1200000000000000,	//o
    0x200000000000002c, 0x1200000000000000,	//,
    0x2000000000000057, 0x1200000000000000,	//W
    0x200000000000006f, 0x1200000000000000,	//o
    0x2000000000000072, 0x1200000000000000,	//r
    0x200000000000006c, 0x1200000000000000,	//l
    0x2000000000000064, 0x1200000000000000,	//d
    0x2000000000000021, 0x1200000000000000,	//!
    0x200000000000000a, 0x1200000000000000,	//[\n]
    0xf000000000000000	//exit
    

    拓展阅读:

    将 code 数组设为 0x0000000000000000, 0x0000000000000001, 0x5000000000010002, 0x1000000000000002, 0xf000000000000000 即可达到 A+B Problem 的要求。逐行解析:

        0x0000000000000000:输入一个整数,将其存放于内存的 0 号位置;
        0x0000000000000001:输入一个整数,将其存放于内存的 1 号位置;
        0x5000000000010002:将内存的 0,1 号位置的数相加,并将结果存放在内存的 2 号位置;
        0x1000000000000002:将 2 号位置的数以数字形式输出;
        0xf000000000000000:退出程序。
    

    AC记录

    • @ 2025-8-4 23:09:09

      @ 要把下面的代码复制到第8行。

    • @ 2026-2-28 16:53:39

      有使用说明吗,要炸了

      (ToT)

  • 17
    @ 2025-7-9 9:11:06

    这道题是一道超难题喵!!

    这个做法是某天和@@@@等同学吃饭时(与题解毫无关系)想到的哦喵~

    既然题目要求输出字符串"Hello,World!""Hello,World!"由此很容易想到字典思路,具体分两步:

    1

    构建 dictionarydictionary 函数的作用

    先创建一个包含所有需要用到的字符(字母、数字、符号)的dictionarydictionary,后续所有字符都从这个库中取

    2

    从这个dictionarydictionary中查找并拼接字符

    逐个找到 Hello,World!Hello,World! 的每个字符在dictionarydictionary中的位置,再取出字符拼接

    ACcode:AC code:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #define lod long double
    #define FastIO ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
    string res;
    string Dictionary()
    {
    	string S;
    	for (char C = 'A'; C <= 'Z'; ++C) {
    		S += C;
    	}
    	for (char C = 'a'; C <= 'z'; ++C) {
    		S += C;
    	}
    	for (char C = '0'; C <= '9'; ++C) {
    		S += C;
    	}
    	S += "!@#$%^&*()_+`-={}|[]\\:\"\",'',./<>?, ";
    	S += "喵~";
    	return S;
    }
    
    signed main()
    {
    	FastIO;
    	string StringSet = Dictionary();
    	res += StringSet[StringSet.find('H')];
    	res += StringSet[StringSet.find('e')];
    	res += StringSet[StringSet.find('l')];
    	res += StringSet[StringSet.find('l')];
    	res += StringSet[StringSet.find('o')];
    	res += StringSet[StringSet.find(',')];
    	res += StringSet[StringSet.find('W')];
    	res += StringSet[StringSet.find('o')];
    	res += StringSet[StringSet.find('r')];
    	res += StringSet[StringSet.find('l')];
    	res += StringSet[StringSet.find('d')];
    	res += StringSet[StringSet.find('!')];
    	cout << res << endl;
    	return 0;
    }
    
  • 3
    @ 2026-1-28 15:19:33

    很简单好吧: #include using namespace std; int main() { cout<<"Hello,World!"; return 0; }

    • 1
      @ 2026-2-1 9:15:46

      #include<bits/stdc++.h>; using namespace std; int main() { cout<<"Hello,World!"; return 0; }

      • 1
        @ 2025-8-22 12:37:13

        ?

        • -1
          @ 2026-2-28 13:25:48
          #include<iostream>
          using namespace std;
          int main(){
              cout<<"Hello,World!";
              return 0;
          }
          

          • -1
            @ 2026-2-1 15:33:15

            #include <bits/stdc++.h> using namespace std;

            int main() { cout << "Hello,World!" << endl;

            return 0;
            

            }

            • -1
              @ 2026-2-1 9:16:38

              #include <bits/stdc++.h> using namespace std;

              int main() { cout << "Hello,World!"; return 0; }

              • -2
                @ 2026-2-1 17:23:25

                我是答案

                答案如下:

                主函数{
                 内容(需解锁会员 --<u>点我充值</u>--)
                }
                
                
              • -15
                @ 2025-7-7 20:53:57

                命名空间写法:

                #include <bits/stdc++.h>
                using namespace std;
                
                namespace Hello_World {
                	void Hello() {
                		cout << "Hello,World!";
                	}
                }
                using namespace Hello_World;
                
                int main() {
                	Hello();
                	return 0;
                }
                
                
                • 1

                Information

                ID
                11909
                Time
                1000ms
                Memory
                128MiB
                Difficulty
                1
                Tags
                # Submissions
                347
                Accepted
                108
                Uploaded By