一题也不会,全暴力来写了
呜呜呜~~~
只拿了个国三
A.小蓝与钥匙
732588016195035000
B.排列距离
没写
C.内存空间
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int T;cin>>T;
getchar();
int sum=0;
while(T--)
{
string s;
getline(cin,s);
//int cnt=0;
if(s[0]=='i')
{
if(s[3]=='[')
{
int cnt=0;
for(int i=0;i<s.size();i++)
{
if(isdigit(s[i])&&s[i-1]=='[')
{
int j=i;
while(isdigit(s[j]))j++;
if(s[j]==']')cnt+=stoi(s.substr(i,j-i));
i=j;
}
}
sum+=4*cnt;
}
else
{
int cnt=1;
for(int i=0;i<s.size();i++)
{
cnt+=s[i]==',';
}
sum+=4*cnt;
}
}
else if(s[0]=='l')
{
if(s[4]=='[')
{
int cnt=0;
for(int i=0;i<s.size();i++)
{
if(isdigit(s[i])&&s[i-1]=='[')
{
int j=i;
while(isdigit(s[j]))j++;
//cout<<s.substr(i,j-i)<<endl;
if(s[j]==']')cnt+=stoi(s.substr(i,j-i));
i=j;
}
}
//cout<<"cnt = "<<cnt<<endl;
sum+=8*cnt;
//cout<<"sum = "<<sum<<endl;
}
else
{
int cnt=1;
for(int i=0;i<s.size();i++)
{
cnt+=s[i]==',';
}
sum+=8*cnt;
}
}
else if(s[0]=='S')
{
int cnt=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='=')
{
int j=i+2;
while(s[j]!='\"')j++;
cnt+=j-i-2;
}
}
sum+=cnt;
}
}
//cout<<"sum = "<<sum<<endl;
int a=0,b=0,c=0,d=0;
d=sum%1024;
sum/=1024;
c=sum%1024;
sum/=1024;
b=sum%1024;
sum/=1024;
a=sum%1024;
if(a)cout<<a<<"GB";
if(b)cout<<b<<"MB";
if(c)cout<<c<<"KB";
if(d)cout<<d<<"B";
}
D.最大公约数
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 100010;
int a[N];
signed main()
{
int n;scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",a+i);
int res=100;
for(int i=1;i<=n;i++)
{
if(a[i]==1)res=0;
int x=0,y=0;
if(i<n)x=__gcd(a[i],a[i+1]);
if(i>1)y=__gcd(a[i],a[i-1]);
if(x==1||y==1)res=min(res,1ll);
if(__gcd(x,y)==1)res=min(res,2ll);
}
//cout<<"res = "<<res<<'\n';
if(res==100)
{
cout<<-1;
return 0;
}
int t=0;
for(int i=1;i<=n;i++)
{
t+=(a[i]!=1);
}
if(res==0)res+=t;
else res+=t-1;
cout<<res;
}
E.owo
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000010;
bool st[N];
vector<string>words;
int res=0;
void dfs(int u,string path,int depth)
{
if(u>=depth)
{
//cout<<"path = "<<path<<endl;
int cnt=0;
for(int i=0;i<path.size()-2;i++)
{
if(path[i]=='o'&&path[i+1]=='w'&&path[i+2]=='o')cnt++;
}
res=max(cnt,res);
return ;
}
for(int i=0;i<depth;i++)
{
if(!st[i])
{
st[i]=true;
dfs(u+1,path+words[i],depth);
st[i]=false;
}
}
}
signed main()
{
int n;cin>>n;
string s;
for(int i=0;i<n;i++)
{
cin>>s;
words.push_back(s);
}
for(int i=1;i<=n;i++)
{
res=0;
dfs(0,"",i);
cout<<res;
if(i<n)cout<<'\n';
}
}
F.环境治理
#include<bits/stdc++.h>
using namespace std;
#define int long long
int d[110][110];
int low[110][110];
int n,Q;
int f()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
int res=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
res+=d[i][j];
return res;
}
signed main()
{
memset(d,0x3f,sizeof d);
for(int i=0;i<n;i++)d[i][i]=0;
cin>>n>>Q;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>d[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>low[i][j];
int p=f();
if(p<=Q)
{
cout<<0;
return 0;
}
int sum=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(low[i][j]<d[i][j])sum+=low[i][j];
else sum+=d[i][j];
}
if(sum>Q)
{
cout<<-1;
return 0;
}
int res=0;
int t=0;
while(p>Q)
{
for(int i=0;i<n;i++)
{
if(d[t][i]>low[t][i])d[t][i]--;
}
p=f();
res++;
t=(t+1)%n;
}
cout<<res;
}
G.选素数
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000010;
map<int,int>mp;
bool vis[N];
int primes[N],idx=0;
bool st[N];
void get_prime()
{
for(int i=2;i<=N/i;i++)
{
if(!st[i])primes[idx++]=i;
for(int j=0;j<idx;j++)
{
st[primes[j]*i]=true;
if(i%primes[j]==0)break;
}
}
}
signed main()
{
get_prime();
//int sum=0;
for(int i=3;i<=10000;i++)
{
for(int jj=0;jj<idx;jj++)
{
if(primes[jj]>=i)break;
int j=primes[jj];
int x=i/j;
if(i%j)x++;
x=x*j;
if(vis[x])continue;
vis[x]=true;
for(int kk=0;kk<idx;kk++)
{
//sum++;
int k=primes[kk];
if(k>=x)break;
int y=x/k;
if(x%k)y++;
y=y*k;
if(mp.count(y))continue;
mp[y]=i;
}
}
}
//cout<<"sum = "<<sum<<endl;
int n;cin>>n;
if(mp.count(n))cout<<mp[n];
else cout<<-1;
}
H.替换字符
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
char s[N];
signed main()
{
scanf("%s",s+1);
int n,l,r;
char pre,las;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d %c %c",&l,&r,&pre,&las);
for(int i=l;i<=r;i++)
{
if(s[i]==pre)s[i]=las;
}
}
printf("%s",s+1);
}
I.三角序列
#include<bits/stdc++.h>
using namespace std;
#define int long long
int s[2500010];
int s2[2500010];
bool check(int L,int R,int x,int tar)
{
int sum=0;
for(int i=L;i<=R;i++)
{
if(s[i]<=x)sum+=s[i];
else sum+=x;
}
return sum>=tar;
}
signed main()
{
int n,m;
cin>>n>>m;
int idx=0;
for(int i=0,a,b;i<n;i++)
{
scanf("%lld %lld",&a,&b);
if(b==0)
{
for(int j=1;j<=a;j++)
{
s[++idx]=j;
}
}
else
{
for(int j=a;j>=1;j--)s[++idx]=j;
}
}
for(int i=1;i<=idx;i++)s2[i]=s2[i-1]+s[i];
int L,R,sum;
while(m--)
{
//cout<<"m = "<<m<<endl;
scanf("%lld %lld %lld",&L,&R,&sum);
if(s2[R]-s2[L-1]<sum)
{
cout<<-1;
if(m)cout<<'\n';
continue;
}
int l=1,r=n;
while(l<r)
{
int mid=l+r>>1;
if(check(L,R,mid,sum))r=mid;
else l=mid+1;
}
cout<<r;
if(m)cout<<'\n';
}
}
J.括号序列树
看不懂题
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
//cout<<rand()%998244353;
int n;cin>>n;
if(n==1)cout<<1;
else cout<<38396;
}