2023年9月24日
今天下午,把atcoder
翻译的弄成了一个ChatGpt
的接口版本。优化了很多。
牛客周赛13 矩阵转置置
题面理解
就是语法,倒着输出即可。
代码实现
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
ll qmi(ll a, ll b){
ll res = 1;
while(b)
{
if(b & 1) res = res * a % Mod;
a = a * a % Mod;
b >>= 1;
}
return res;
}
ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
const int N = 110;
int a[N][N];
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
cin >> a[i][j];
for(int i = n; i >= 1; i--)
{
for(int j = n; j >= 1; j--)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
牛客周赛13 小红买基金
题面理解
假设有k
张卡,是符合范围的那么,这k
张卡都有买和不买两种选择。所以就是2^k
代码实现
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
ll qmi(ll a, ll b){
ll res = 1;
while(b)
{
if(b & 1) res = res * a % Mod;
a = a * a % Mod;
b >>= 1;
}
return res;
}
const int N = 200000 + 10;
ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
ll C8(int n, int m)
{
if (n == m || m == 0) return 1;
return C8(n, m-1) * (n-m+1) / m;
}
ll n, a, b;
int main() {
cin >> n >> a >> b;
ll res = 1;
for(int i = 1; i <= n; i++)
{
int p, q;
cin >> p >> q;
if(p >= a && q <= b)
res = mo(res * 2);
res = mo(res);
}
cout << res - 1;
return 0;
}
牛客周赛13 小红改密码
题面理解
-
替换大写字母:在密码中所有的大写字母位置上,可以替换为其他任意一个大写字母(除原字母外)。共有26种可能性。
-
替换小写字母:在密码中所有的小写字母位置上,可以替换为其他任意一个小写字母(除原字母外)。共有26种可能性。*
-
替换数字:在密码中所有的数字位置上,可以替换为其他任意一个数字(除原数字外)。共有10种可能性。
-
替换特殊符号:在密码中所有的特殊符号位置上,可以替换为其他任意一个特殊符号(除原符号外)。共有4种可能性。
-
如果那个字母只出现了一次,那只能替换出他自己以外的同种类的,如一个小字母,那么那个小写字母只能替换25个
代码实现
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
ll qmi(ll a, ll b){
ll res = 1;
while(b)
{
if(b & 1) res = res * a % Mod;
a = a * a % Mod;
b >>= 1;
}
return res;
}
const int N = 200000 + 10;
ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
int n;
int main() {
int all = 26 + 26 + 10 + 4 - 1;
cin >> n;
while(n--)
{
string s;
cin >> s;
int num = 0, en = 0, EN = 0, oth = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] >= '0' && s[i] <= '9') num++;
else if(s[i] >= 'A' && s[i] <= 'Z') EN++;
else if(s[i] >= 'a' && s[i] <= 'z') en++;
else if(s[i] == '!' || s[i] == '?' || s[i] == ',' || s[i] == '.') oth++;
}
int res = 0;
if(num > 1)
res += num * all;
else
res += 9;
if(EN > 1)
res += EN * all;
else
res += 25;
if(en > 1)
res += en * all;
else
res += 25;
if(oth > 1)
res += oth * all;
else
res += 3;
cout << res << endl;
}
return 0;
}
Acwing1912 历程表
题面理解
这个题面直接枚举所有符合规则的数即可。范围很小,然后学到了stoll、stio
,以及创建长度为n
都是x
组成的字符串string s(n, x)
代码实现
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
ll qmi(ll a, ll b){
ll res = 1;
while(b)
{
if(b & 1) res = res * a % Mod;
a = a * a % Mod;
b >>= 1;
}
return res;
}
ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
int main() {
ll a, b;
cin >> a >> b;
int res = 0;
for(int i = 3; i <= 17; i++)
for(int j = 0; j < 10; j++)
for(int k = 0; k < 10; k++)
if(j != k)
for(int u = 0; u < i; u++)
{
string s(i, '0' + j);
s[u] = '0' + k;
if(s[0] != '0')
{
ll v = stoll(s);
if(v >= a && v <= b)
res++;
}
}
cout << res;
return 0;
}
Acwing2003 找到牛
题面理解
我是用的最最最暴力的枚举。。。哎
优化枚举:
- 记录前面有多少条前腿
- 遇到后退就加上,前面有多少个前腿
- 因为我们是从左往右枚举,所以遇到的后退,一定是能和前面的腿组合的!!!!!哎纯笨蛋了这个。
代码实现
笨蛋枚举
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
ll qmi(ll a, ll b){
ll res = 1;
while(b)
{
if(b & 1) res = res * a % Mod;
a = a * a % Mod;
b >>= 1;
}
return res;
}
ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
int main() {
string s;
cin >> s;
int l = 0, r = 0;
int res = 0;
vector<int> posl, posr;
for(int i = 0; i < s.size() - 1; i++)
if(s[i] == s[i + 1] && s[i] == '(')
posl.push_back(i);
for(int i = 0; i < s.size() - 1; i++)
if(s[i] == s[i + 1] && s[i] == ')')
posr.push_back(i);
for(int i = 0 ; i < posl.size(); i++)
{
for(int j = 0; j < posr.size(); j++)
{
if(posl[i] < posr[j])
{
res += posr.size() - j;
break;
}
}
}
cout << res;
return 0;
}
聪明蛋枚举
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string str;
int main()
{
cin >> str;
int res = 0;
for (int i = 1, s = 0; i < str.size(); i ++ )
{
if (str[i] == '(' && str[i - 1] == '(') s ++ ;
else if (str[i] == ')' && str[i - 1] == ')') res += s;
}
cout << res << endl;
return 0;
}
标签:道题,return,int,res,ll,受制,include,119,Mod
From: https://www.cnblogs.com/wxzcch/p/17726928.html