1. 质因数
#include<bits/stdc++.h>
using namespace std;
int n,t;
vector<int> v;
bool is_prime(int x)
{
for(int i=2;i<=x/i;i++)
if(x%i==0)
return false;
return true;
}
int main()
{
cin>>n;
t=n;
cout<<n<<"=";
while(n!=1)
{
for(int i=2;i<=t;i++)
{
if(is_prime(i) && n%i==0)
{
v.push_back(i);
n/=i;
break;
}
}
}
for(int i=0;i<v.size();i++)
{
if(i) cout<<"*";
cout<<v[i];
}
return 0;
}
2.谁是老二?
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main()
{
while(cin>>n)
{
int a[110];
priority_queue<int> q;
set<int> se;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(!se.count(a[i]))
{
q.push(a[i]);
se.insert(a[i]);
}
}
q.pop();
if(!q.size()) puts("none");
else{
auto t=q.top();
cout<<t;
for(int i=0;i<n;i++)
{
if(a[i]==t)
{
cout<<" "<<i;
}
}
puts("");
}
}
return 0;
}
3.骑士斗恶龙
#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 2e4+10;
int n,m;
int d[N],k[N];
int main()
{
while(cin>>n>>m)
{
for(int i=0;i<n;i++) cin>>d[i];
for(int i=0;i<m;i++) cin>>k[i];
if(n>m) puts("Lose!");
else{
sort(d,d+n);
sort(k,k+m);
int res=0,i=0,j=0;
for(i=0;i<m;i++)
{
if(k[i]>=d[j])
{
j++;
res+=k[i];
}
if(j>=n) break;
}
if(j<n) puts("Lose!");
else cout<<res<<endl;
}
}
return 0;
}
4.蛇形方阵
#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int a[N][N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a[i][j]=++m;
}
}
for(int i=1;i<=n;i++)
{
if(i%2){
printf("%4d",a[i][1]);
for(int j=2;j<=n;j++) printf("%4d",a[i][j]);
puts("");
}
else{
printf("%4d",a[i][n]);
for(int j=n-1;j>0;j--) printf("%4d",a[i][j]);
puts("");
}
}
return 0;
}
5.单词统计
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main()
{
cin>>n;
getchar();
while(n--)
{
int cnt=0;
getline(cin,s);
stringstream ssin(s);
while(ssin>>s)
{
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
6.转换成十进制
#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int main()
{
while(cin>>n>>s)
{
int t=1,ans=0;
for(int i=(int)s.size()-1;i>=0;i--)
{
if(s[i]>='0' && s[i]<='9') ans+=(s[i]-'0')*t;
else ans+=(s[i]-'A'+10)*t;
t*=n;
}
cout<<ans<<endl;
}
return 0;
}
7.十进制转换成其它进制
#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int main()
{
while(cin>>n>>m)
{
string ans="";
while(n)
{
int t=n%m;
if(t>=0 && t<10) ans=char(t+'0')+ans;
else ans=char('A'+t-10)+ans;
n/=m;
}
cout<<ans<<endl;
}
return 0;
}
8.最大相同子串
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
string s1,s2,ans;
int main()
{
while(cin>>s1>>s2)
{
ans="";
int len1=s1.size(),len2=s2.size();
if(len1>len2)
{
swap(s1,s2);
swap(len1,len2);
}
for(int i=0;i<len1;i++)
{
for(int j=1;j<=len1-i;j++)
{
string t=s1.substr(i,j);
int idx=s2.find(t);
if(idx!=-1)
{
if((int)ans.size()<1) ans=t;
else{
if(t.size()>ans.size())
{
ans=t;
}
else if(t.size()==ans.size() && t<ans)
{
ans=t;
}
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
9.冰雹数
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,ans;
set<int> se;
int main()
{
cin>>n;
if(n==1){
cout<<1;
return 0;
}
for(int i=2;i<=n;i++)
{
ans=max(ans,i);
if(!se.count(i)) se.insert(i);
else continue;
int j=i;
while(j!=1)
{
if(j%2) j=j*3+1;
else j/=2;
ans=max(ans,j);
if(!se.count(j)) se.insert(j);
else break;
}
}
cout<<ans;
return 0;
}
10.小数第n位
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
typedef long long LL;
int n,ans;
int main()
{
LL a,b;
cin>>a>>b>>n;
while(n-10>0)
{
a*=1e10;
a%=b;
n-=10;
}
for(int i=0;i<n+2;i++)
{
a*=10;
if(i>=n-1)
printf("%lld",a/b);
a%=b;
}
return 0;
}
11.丑数
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
LL n,ans,top,k,x,a[N];
set<LL> se;
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
se.insert(a[i]);
}
while(k--)
{
top=*se.begin();
se.erase(se.begin());
for(int i=0;i<n;i++)
se.insert(top*a[i]);
}
cout<<top;
return 0;
}
12.笨小猴
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,maxt=-N,mint=N;
map<char,int> mp;
string s;
bool is_prime(int x)
{
for(int i=2;i<=x/i;i++)
if(x%i==0)
return false;
return true;
}
int main()
{
getline(cin,s);
for(int i=0;i<s.size();i++)
{
if(s[i]>='a' && s[i]<='z')
mp[s[i]]++;
}
for(int i='a';i<='z';i++)
{
if(mp[i])
{
maxt=max(maxt,mp[i]);
mint=min(mint,mp[i]);
}
}
maxt-=mint;
if(maxt<2){
cout<<"No Answer"<<endl;
cout<<0<<endl;
}
else{
if(is_prime(maxt)){
cout<<"Lucky Word"<<endl;
cout<<maxt<<endl;
}
else{
cout<<"No Answer"<<endl;
cout<<0<<endl;
}
}
return 0;
}
13.字串统计
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,maxt;
string s,ans;
int main()
{
cin>>n;
cin>>s;
for(int i=n;i<s.size();i++)
{
for(int j=0;j<s.size()-i;j++)
{
string s1=s.substr(j,i);
int cnt=0;
for(int k=j+1;k<s.size()-i;k++)
{
string s2=s.substr(k,i);
if(s1==s2) cnt++;
}
if((cnt>maxt) || s1.size()>ans.size() && cnt==maxt)
{
maxt=cnt;
ans=s1;
}
}
}
cout<<ans;
return 0;
}
14.Anagrams问题
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,a1[30],a2[30];
string s,s1,s2;
int main()
{
cin>>s1>>s2;
for(int i=0;i<s1.size();i++)
{
if(s1[i]>='a' && s1[i]<='z') a1[s1[i]-'a']++;
if(s1[i]>='A' && s1[i]<='Z') a1[s1[i]-'A']++;
}
for(int i=0;i<s2.size();i++)
{
if(s2[i]>='a' && s2[i]<='z') a2[s2[i]-'a']++;
if(s2[i]>='A' && s2[i]<='Z') a2[s2[i]-'A']++;
}
for(int i=0;i<30;i++)
{
if(a1[i]!=a2[i])
{
cout<<"N";
return 0;
}
}
cout<<"Y";
return 0;
}
15.身份证号码升级
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,sf,a[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
string s;
char c[11]={'1','0','x','9','8','7','6','5','4','3','2'};
int main()
{
cin>>s;
string t=s.substr(0,6);
t+="19";
t+=s.substr(6);
s=t;
for(int i=0;i<17;i++)
sf+=((s[i]-'0')*a[i]);
sf%=11;
s+=c[sf];
cout<<s;
return 0;
}
16.彩票
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,sf,jiang[10];
set<int> se;
int main()
{
cin>>n;
for(int i=0;i<7;i++)
{
cin>>sf;
se.insert(sf);
}
while(n--)
{
int cnt=0;
for(int i=0;i<7;i++)
{
cin>>sf;
if(se.count(sf)) cnt++;
}
jiang[7-cnt]++;
}
for(int i=0;i<7;i++) cout<<jiang[i]<<" ";
return 0;
}
17.质数的后代
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,primes[N],co;
bool st[N];
set<int> se;
int main()
{
for(int i=2;i<=N;i++)
{
if(!st[i]){
primes[co++]=i;
se.insert(i);
}
for(int j=0;primes[j]<=N/i;j++)
{
st[i*primes[j]]=1;
if(i%primes[j]==0) break;
}
}
cin>>n;
int x;
for(int i=0;i<n;i++)
{
int f=0;
cin>>x;
for(int i=0;i<co;i++)
{
if(x%primes[i]==0 && se.count(x/primes[i]))
{
f=1;
break;
}
}
if(f) puts("Yes");
else puts("No");
}
return 0;
}
18.高精度乘法
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e5+10;
int a[M],b[M],l1,l2;
char s[N];
void print(int a[])
{
int k=M-1;
while(k && !a[k]) k--;
for(int i=k;i>=0;i--) cout<<a[i];
}
void mul(int a[],int b[])
{
int t=0,temp[M];
memset(temp,0,sizeof temp);
for(int i=0;i<l1;i++)
for(int j=0;j<l2;j++)
temp[i+j]+=a[i]*b[j];
for(int i=0;i<l1+l2;i++)
{
t+=temp[i];
temp[i]=t%10;
t/=10;
}
memcpy(a,temp,sizeof temp);
}
int main()
{
scanf("%s",s);
l1=strlen(s);
for(int i=0;i<l1;i++) a[l1-i-1]=s[i]-'0';
scanf("%s",s);
l2=strlen(s);
for(int i=0;i<l2;i++) b[l2-i-1]=s[i]-'0';
mul(a,b);
print(a);
return 0;
}
19.阶乘末尾
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10,M= 2e5+10;
int a[N],n,len;
void mul(int a[],int x)
{
int c[N],temp=0;
memset(c,0,sizeof c);
for(int i=0;i<N;i++)
{
temp+=x*a[i];
c[i]=temp%10;
temp/=10;
}
memcpy(a,c,sizeof c);
}
int main()
{
a[0]=1;
scanf("%d%d",&n,&len);
for(int i=2;i<=n;i++)
{
mul(a,i);
}
string res="";
for(int i=0;i<len;i++) res=char(a[i]+'0')+res;
cout<<res;
return 0;
}
20.寂寞的数
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10,M= 2e5+10;
bool st[N];
int n;
void d(int u)
{
if(u>N) return ;
int res=u;
while(u)
{
int t=u%10;
res+=t;
u/=10;
}
st[res]=1;
d(res);
}
int main()
{
for(int i=1;i<=N;i++)
{
if(!st[i])
{
d(i);
}
}
cin>>n;
for(int i=1;i<=n;i++)
{
if(!st[i])
cout<<i<<endl;
}
return 0;
}
21.数列
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3+10,M= 2e9;
bool st[N];
int f,k,n,a[N],ans;
set<int> se;
void dfs(int u)
{
if(f==2) return ;
if(u==10){
if(!f){
f=1;
return ;
}
else if(f==1){
int t=1,res=0;
for(int i=9;i>=0;i--)
{
if(st[i]) res+=t;
t*=k;
}
if(!se.count(res)){
se.insert(res);
if(se.size()==n){
cout<<res;
f=2;
}
}
return ;
}
}
dfs(u+1);
st[u]=1;
dfs(u+1);
st[u]=0;
}
int main()
{
cin>>k>>n;
dfs(0);
return 0;
}
22.孪生素数
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
bool st[N];
int k,n,x,ans,primes[N],cnt,p[N];
set<int> se;
int main()
{
for(int i=2;i<=N;i++)
{
if(!st[i]) primes[cnt++]=i;
for(int j=0;primes[j]<=N/i;j++)
{
st[primes[j]*i]=1;
if(i%primes[j]==0) break;
}
}
for(int i=1;i<cnt;i++)
{
if(primes[i]==primes[i-1]+2)
{
p[k++]=primes[i];
}
}
while(cin>>n)
{
if(n<0) break;
int co=0;
for(co=0;co<k;co++)
{
if(p[co]>n) break;
}
cout<<co<<endl;
}
return 0;
}
23.区间k大数查询
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
bool st[N];
int k,n,m,x,ans,a[N],cnt,p[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
int l,r;
while(m--)
{
cin>>l>>r>>k;
vector<int> v;
for(int i=l;i<=r;i++)
{
v.push_back(a[i]);
}
sort(v.begin(),v.end(),greater<int>());
cout<<v[k-1]<<endl;
}
return 0;
}
24.数的统计
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
int k,n,m,x,ans,a[N];
map<int,int> mp;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
mp[x]++;
}
for(auto x:mp)
cout<<x.first<<" "<<x.second<<endl;
return 0;
}
25.数字黑洞
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
int k,n,m,x,co,ans,a[N];
map<int,int> mp;
string s;
int main()
{
cin>>s;
while(s!="6174")
{
sort(s.begin(),s.end());
int t1=0,t2=0,k1=1000,k2=1;
for(int i=s.size()-1;i>=0;i--)
{
t1+=(s[i]-'0')*k1;
t2+=(s[i]-'0')*k2;
k1/=10;
k2*=10;
}
t1-=t2;
s=to_string(t1);
while(s.size()<4) s+='0';
co++;
}
cout<<co;
return 0;
}
26.质数的乘积
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10,MOD=5e4;
int k=2,n,m,x,co,a[N];
LL ans=1;
int main()
{
cin>>n;
if(n==0) cout<<0;
else if(n==1) cout<<2;
else if(n==2) cout<<6;
else{
ans=6;
for(int times=3,i=5;times<=n;i++)
{
int f=0;
for(int j=2;j<=sqrt(i);j++)
{
if(i%j==0 && i!=j)
{
f=1;
break;
}
}
if(!f){
ans=(ans*i)%MOD;
times++;
}
}
cout<<ans%MOD;
}
return 0;
}
27.暗恋
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 210,MOD=5e4;
int n,m,x,co,g[N][N],ans;
bool check(int x,int y,int len)
{
int color=g[x][y];
for(int i=0;i<len;i++)
for(int j=0;j<len;j++)
if(g[x+i][y+j]!=color)
return false;
return true;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>g[i][j];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
for(int len=ans+1;len<max(n,m);len++)
{
if(i+len<=n && j+len<=m)
{
if(check(i,j,len)) ans=len;
}
else break;
}
}
}
cout<<ans*ans;
return 0;
}
28.约瑟夫环
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,k;
bool st[N];
int main()
{
while(cin>>n>>k)
{
vector<int> v;
memset(st,0,sizeof st);
int cur=0,cnt=1,tot=0;
while(tot!=n)
{
if(st[cur])
{
cur=(cur+1)%n;
continue;
}
if(cnt%k==0)
{
st[cur]=1;
v.push_back(cur+1);
tot++;
}
cur=(cur+1)%n;
cnt++;
}
for(int i=0;i<v.size()-1;i++) cout<<v[i]<<" ";
cout<<v[v.size()-1]<<endl;
}
return 0;
}
29.连续正整数的和
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10,MOD=5e4;
int n,r;
bool st[N];
void dfs(int u,int tot)
{
if(tot>n) return ;
if(tot==n)
{
r=u-1;
return ;
}
dfs(u+1,tot+u);
}
int main()
{
cin>>n;
for(int i=1;i<=n/2;i++)
{
r=-1;
dfs(i,0);
if(r!=-1)
{
cout<<i<<" "<<r<<endl;
}
}
return 0;
}
30.翻硬币
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,k,co;
string s1,s2;
int main()
{
cin>>s1>>s2;
for(int i=0;i<s1.size()-1;i++)
{
if(s1[i]!=s2[i])
{
if(s1[i]=='*') s1[i]='o';
else s1[i]='*';
if(s1[i+1]=='o') s1[i+1]='*';
else s1[i+1]='o';
co++;
}
}
cout<<co;
return 0;
}
31.分糖果
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,a[N],b[N],cnt=0;
string s1,s2;
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
while(1)
{
memset(b,0,sizeof b);
for(int i=0;i<n-1;i++)
b[i]=a[i+1]/2;
b[n-1]=a[0]/2;
for(int i=0;i<n;i++)
{
a[i]/=2;
a[i]+=b[i];
if(a[i]%2){
a[i]++;
cnt++;
}
}
set<int> se;
int f=0;
for(int i=0;i<n;i++)
{
se.insert(a[i]);
if(se.size()>1)
{
f=1;
break;
}
}
if(!f){
cout<<cnt;
break;
}
}
return 0;
}
32.扫雷
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,m,a[N][N],cnt=1;
char g[N][N];
int dx[8]={1,0,-1,0,-1,-1,1,1},dy[8]={0,1,0,-1,-1,1,-1,1};
int main()
{
while(cin>>n>>m)
{
if(!n && !m) break;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>g[i][j];
memset(a,-1,sizeof a);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(g[i][j]!='*')
{
int cnt=0;
for(int k=0;k<8;k++)
{
int x=i+dx[k],y=j+dy[k];
if(x>=0 && x<n && y>=0 && y<m && g[x][y]=='*') cnt++;
}
a[i][j]=cnt;
}
}
cout<<"Field #"<<cnt<<":"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]==-1) cout<<'*';
else cout<<a[i][j];
}
cout<<endl;
}
cout<<endl;
cnt++;
}
return 0;
}
33.S01串
#include<bits/stdc++.h>
using namespace std;
string s="0";
int n;
int main()
{
cin>>n;
while(n--)
{
string t="";
for(int i=0;i<s.size();i++)
{
if(s[i]=='0') t+='1';
else t+="01";
}
s=t;
}
cout<<s;
return 0;
}
34.身份证排序
#include<bits/stdc++.h>
using namespace std;
int n;
string str;
struct node{
string s,dt;
bool operator<(const node &p) const{
if(dt!=p.dt) return dt>p.dt;
return s>p.s;
}
};
int main()
{
vector<node> v;
cin>>n;
while(n--)
{
cin>>str;
v.push_back({str,str.substr(6,8)});
}
sort(v.begin(),v.end());
for(auto x:v) cout<<x.s<<endl;
return 0;
}
35.回文数
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,m,cnt=1;
char a[N];
string s;
void add(char a[],char b[])
{
char c[N];
for(int i=0;i<N;i++) c[i]='0';
int t=0;
for(int i=0;i<N;i++)
{
int c1,c2;
if(a[i]>='0' && a[i]<='9') c1=a[i]-'0';
else c1=a[i]-'A'+10;
if(b[i]>='0' && b[i]<='9') c2=b[i]-'0';
else c2=b[i]-'A'+10;
t=c1+c2+t;
int cc=t%m;
if(cc<10) c[i]=char(cc+'0');
else c[i]=char(cc-10+'A');
t/=m;
}
memcpy(a,c,sizeof c);
}
int main()
{
for(int i=0;i<N;i++) a[i]='0';
cin>>m>>s;
if(s==string(s.rbegin(),s.rend()))
{
cout<<"STEP="<<0;
return 0;
}
for(int i=(int)s.size()-1;i>=0;i--)
a[n++]=s[i];
while(cnt<=30)
{
char b[N];
for(int i=0;i<N;i++) b[i]='0';
string t=string(s.rbegin(),s.rend());
int idx=0;
for(int i=(int)t.size()-1;i>=0;i--)
b[idx++]=t[i];
add(a,b);
idx=N-1;
while(a[idx]=='0') idx--;
string ss="";
for(int i=idx;i>=0;i--) ss+=a[i];
if(ss==string(ss.rbegin(),ss.rend())){
cout<<"STEP="<<cnt;
break;
}
s=ss;
cnt++;
}
if(cnt>=30) puts("Impossible!");
return 0;
}
36.新生舞会
#include<bits/stdc++.h>
using namespace std;
int n,m;
string s1,s2,s3;
map<string,string> mp1,mp2;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s1>>s2>>s3;
mp1[s1]=s3,mp2[s2]=s3;
}
cin>>m;
while(m--)
{
cin>>s1>>s2;
int f=0;
string sex1,sex2;
if(mp1[s1].size()) sex1=mp1[s1];
else sex1=mp2[s1];
if(mp1[s2].size()) sex2=mp1[s2];
else sex2=mp2[s2];
if(sex1!=sex2) puts("Y");
else puts("N");
}
return 0;
}
37.班级排名
#include<bits/stdc++.h>
using namespace std;
int n,m,sc,a[110];
string s1;
map<string,int> mp;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s1;
mp[s1]=i;
}
cin>>m;
while(m--)
{
int t=0;
vector<int> v;
for(int i=0;i<n;i++)
{
cin>>sc>>s1;
a[mp[s1]]+=sc;
v.push_back(a[mp[s1]]);
if(s1=="DaDa") t=a[mp[s1]];
}
sort(v.begin(),v.end(),greater<int>());
for(int i=0;i<v.size();i++)
{
if(t==v[i])
{
cout<<i+1<<endl;
break;
}
}
}
return 0;
}
38.铺地毯
#include<bits/stdc++.h>
using namespace std;
int n,m,f,a,b,c,d;
struct node{
int x_1,y_1,x_2,y_2;
};
int main()
{
vector<node> v;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a>>b>>c>>d;
v.push_back({a,b,a+c,b+d});
}
cin>>a>>b;
for(int i=n-1;i>=0;i--)
{
if(v[i].x_1<=a && a<=v[i].x_2 && v[i].y_1<=b && b<=v[i].y_2)
{
f=1;
cout<<i+1;
break;
}
}
if(!f) cout<<-1;
return 0;
}
39.最小乘积
#include<bits/stdc++.h>
using namespace std;
int n,m,r,ans,a[10],b[10],T;
int main()
{
cin>>T;
while(T--)
{
ans=0;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
sort(a,a+n);
sort(b,b+n,greater<int>());
for(int i=0;i<n;i++)
ans+=a[i]*b[i];
cout<<ans<<endl;
}
return 0;
}
40. 排队打水问题
#include<bits/stdc++.h>
using namespace std;
int n,m,r,ans,a[510];
priority_queue<int,vector<int>,greater<int> > q;
int main()
{
cin>>n>>r;
for(int i=0;i<n;i++)
{
cin>>a[i];
ans+=a[i];
}
sort(a,a+n);
for(int i=0;i<r;i++) q.push(a[i]);
for(int i=r;i<n;i++)
{
auto t=q.top(); q.pop();
ans+=t;
t+=a[i];
q.push(t);
}
cout<<ans;
return 0;
}