首页 > 其他分享 >暑假集训D20 2023.8.15

暑假集训D20 2023.8.15

时间:2023-08-15 21:03:53浏览次数:42  
标签:15 cout 5ms int D20 花费 str pwd1 2023.8

A.Access Denied

题意:给出系统密码比对的程序和每条指令所耗费的时间,你需要通过程序返回的执行时间来破解出正确的密码.

\(\operatorname{Solution}\)

bool CheckPassword(string pwd1, string pwd2) {
    if (pwd1.Length != pwd2.Length) {
        return false;
    }
    for (int i = 0; i < pwd1.Length; i++) {
        if (pwd1[i] != pwd2[i]) {
            return false;
        }
    }
    return true;
}

检查密码的程序如上所示.可以先猜长度再猜每个字符.长度错误会耗费 \(5ms\) .直到返回的时间不是 \(5ms\) 说明长度猜对了.
然后猜每个字符.根据判断的程序.首先判断长度花费了 \(4ms\).
然后每次 \(for\) 循环都要花费 \(5ms\) (赋值或i++花费 \(1ms\) ,比较花费 \(3ms\) ,for分支花费 \(1ms\) )
进入循环后,判断字符时,如果不等于则花费 \(5ms+4ms\) ,如果相等花费 \(5ms+5ms\) ,不妨假设前 \(k\) 个字符相等,第 \(k+1\) 个字符不等,那么花费时间就是 \(4+9*k+10ms\).
每次枚举每个位置的字母即可.返回的时间 \(x\) ,代表下标在 \(x/9-1\) 上的字母出错了,枚举即可.

#include<bits/stdc++.h>

using namespace std;
#define  pb push_back
vector<char> p;
int check(string t)
{
	cout<<t<<endl;
	string str;
	cin>>str;
	cin>>str;
	if(str=="GRANTED")
	{
		exit(0);
	}
	int x;
	scanf(" (%d",&x);
	// cout<<"x:"<<x<<endl;
	cin>>str;
	return (x/9) -1;
}
int main()
{
	string s = "a";
	int len =1;
	for(int i= 'a';i<='z';i++)
		p.pb(i);
	for(int i= 'A';i<='Z';i++)
		p.pb(i);
	for(int i= '0';i<='9';i++)
		p.pb(i);
	// for(char j:p)
	// {
	// 	cout<<j<<endl;
	// }
	int x;
	while(1)
	{
		cout<<s<<endl;
		string str;
		cin>>str;
		// cout<<str<<' ';
		cin>>str;
		// cout<<str<<' ';

		if(str=="GRANTED")exit(0);
		
		scanf(" (%d",&x);
		// cout<<x<<' ';
		cin>>str;
		// cout<<str<<'\n';

		if(x!=5)break;
		len++;
		s+="a";
	}
	// cout<<len<<endl;
	int i = x/9 - 1;
	// cout<<i<<endl;
	for(;i<len;)
	{
		for(char j :p)
		{
			// cout<<"j:"<<j<<endl;
			s[i] = (char)j;
			int temp = check(s);
			// cout<<"temp:"<<temp<<endl;
			if(temp!=i)
			{
				i = temp;
				break;
			}
		}
	}

	return 0;
}

标签:15,cout,5ms,int,D20,花费,str,pwd1,2023.8
From: https://www.cnblogs.com/oijueshi/p/17632415.html

相关文章

  • 8.15
    #include<iostream>#include<vector>#include<set>usingnamespacestd;intmaxlevel=1;vector<vector<int>>v;set<int>s;voiddfs(intnode,intlevel){if(level>maxlevel){maxlevel=level;s.cl......
  • 代码随想录算法训练营第十一天|力扣20.有效的括号、力扣1047.删除字符串中所有相邻重
    有效的括号(力扣20.)括号匹配时使用栈解决的经典问题题意其实就像我们在写代码的过程中,要求括号的顺序是一样的有左括号,那么在对应位置则必须有右括号第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以returnfalse第二种情况:遍历字......
  • [ABC215D] Coprime 2
    题目大意给定一个长度为\(n\)的数列\(a\),要求出\(1\simm\)中与\(a\)中的所有元素互质的数。数据范围:\(1\\leq\n,m\\leq\10^5,1\\leq\a_i\\leq\10^5\)。思路模拟赛加强了数据,卡了\(\mathcal{O}(n\sqrt{n})\),于是来写一个\(\mathcal{O}(n\logn)\)的。考......
  • 基于Hexo和Butterfly创建个人技术博客,(15) 开发个人hexo主题-stylus动态样式语法
    stylus可以简单理解为一个动态的css样式表,在原有W3C规定的基础上增加了编程的能力,在使用前通过插件会再编译成普通的css文件。本章目标:掌握stylus样式语法,本章开始我们会从头开始编写自己的博客主题,同样采用pug和styl语法,官方帮助文档:stylus一、概述Stylus语法是python式基于缩进......
  • 闲话 2023.8.15
    一些算式的证明。\[\begin{aligned}\sum_{1\lei<j\len}i+j&=\sum\limits_{i=1}^{n-1}\left(\sum\limits_{j=i+1}^{n}j+\sum\limits_{j=i+1}^{n}i\right)\\&=\sum\limits_{i=1}^{n-1}\left[\dfrac{\left(n+i+1......
  • odoo15自定义小部件widget
    添加自定义widget的步骤比较简单,以下三步就可以了:1、JS实现widget的功能/*这个文件(文件名为my_basic_fields.js)要在__manifest__.py中设置,如下:'assets':{'web.assets_backend':['testaddons/static/src/js/my_basic_fields.js',],},*/odoo.define(�......
  • 2023/08/15
    15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?package练习;publicclassMonkeyKing{publicstaticvoidmain(String[]args){boolean[]b=newboolean[15];for(inti=0;i<b.lengt......
  • 虚拟化103.216.154.x
    虚拟化是一种资源管理,将计算机的各种实体资源,如果服务器、网络、内存、存储等,予以抽象、转换后呈现出来,打破实体结构间的补课切割障碍,使用户可以比原来组态更好的方式应用这些资源,这些资源的新虚拟部分是不受现有资源架设方式,地域或者物理组态所限制。一般所指的虚拟化资源包括计算......
  • Codeforces Global Round 15
    CodeforcesGlobalRound15A-SubsequencePermutation思路:找出原串与排序后的串不同的个数#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;cin>>n;strings;cin>>s;stringt=s;sort(t.begin(),t.end());intans=0;......
  • 8-15| _ctypes.COMError: (-2147352567, '发生意外。', ('无法获取 Document 对象', '
    此错误是一个COM错误,它与试图从Python通过`pyautocad`与AutoCAD通信时出现的问题有关。错误信息"无法获取Document对象"指示了问题的本质,即Python无法访问AutoCAD的当前文档。这里有一些建议来解决这个问题:1.**确保AutoCAD已经运行**:在尝试从Python访问Aut......