暴力
#include
using namespace std;
long long n,k;
long long f(long long b){
int ans=0;
while(b){
int y=b%10;
if(y==3)ans++;
b/=10;
}
return ans;
}
int main(){
cin>>n>>k;
for(long long i=n;;i++){
if(f(i)==k){
cout<<i;
return 0;
}
}
return 0;
}
数组记录次数,不是0不输出
#include
using namespace std;
int n,a[1000500];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int q;
cin>>q;
if(!a[q])cout<<q<<" ";
a[q]=1;
}
return 0;
}
模拟
向上取整ceil
四舍五入round
#include
using namespace std;
int n;
struct student{
string name;
int pscj,qmcj,zpcj,id;
}a[1050];
bool cmp(student a,student b){
if(a.zpcj>b.zpcj)return true;
else if(a.zpcj==b.zpcj && a.id<b.id)return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
a[i].id=i;
cin>>a[i].name>>a[i].pscj>>a[i].qmcj;
a[i].qmcj=ceil(1.0*sqrt(a[i].qmcj)*10);
a[i].zpcj=round(1.0*a[i].qmcj*0.6+a[i].pscj*0.4);
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].name<<" "<<a[i].zpcj<<endl;
}
return 0;
}
map大法直接模拟
#include
using namespace std;
int n,q;
map<string,string>mp;
string s,ss;
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>s>>ss;
mp[s]=ss;
}
for(int i=1;i<=q;i++){
string timu,answer;
int ans=0;
cin>>timu;
for(int j=0;j<4;j++){
cin>>answer;
if(mp[timu]==answer){
ans=j;
}
}
cout<<char(ans+'A')<<endl;
}
return 0;
}
模拟大法
#include
using namespace std;
int n,m,k;
int a[10000050];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
int p;
cin>>p;
while(!a[p]){
a[p]=1;
p=(p+k)%n;
}
}
int cnt=0;
for(int i=0;i<n;i++){
if(a[i]==0)cnt++;
}
cout<<cnt;
return 0;
}
暴力
#include
using namespace std;
int n,v,m,a;
int ans,s,sum;
int main(){
cin>>n>>v>>m>>a;
for(int i=1;i<=n;i++){
ans+=v;
s++;
if(s==m){
s=0;
v+=a;
}
}
cout<<ans;
return 0;
}
暴力
#include
using namespace std;
int x;
double ans,sum;
int main(){
cin>>x;
if(x<60){
x=sqrt(x)*10;
}
if(x<60){
cout<<"0.0";
return 0;
}else if(x>=90){
cout<<"4.0";
return 0;
}else if(x>=60&&x<=89){
sum=1.0*(90-x)*0.1;
ans=1.0*4.0-sum;
printf("%.1lf",ans);
return 0;
}
return 0;
}
模拟,重载排序记得排好先后顺序
#include
using namespace std;
int n;
struct zyz{
long long level,time,num;
long long ans;
}a[1005000];
bool cmp(zyz a,zyz b){
if(a.ans!=b.ans)return a.ans>b.ans;
if(a.time!=b.time)return a.time>b.time;
if(a.num!=b.num)return a.num<b.num;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].time>>a[i].level;
a[i].num=i;
a[i].ans=a[i].time*a[i].level;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].num<<" ";
}
return 0;
}
双map配合模拟
使用iterator迭代器遍历map:
map::iterator it;
for(it=mpp.begin();it!=mpp.end();++it){
cout<<(it->second)<}
迭代器中,first 和 second,分别指向键值和数值
mp.erase(x) 删除x 如果这个数不存在,则什么都不干
mp.count(Key)返回值为1或者0,1返回存在,0返回不存在
#include
using namespace std;
string s,ss,sss;
int n,sum;
map<string,int>mp;
map<int,string>mpp;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
if(s=="touch"){
cin>>ss;
if(!mp.count(ss)){
mp[ss]=++sum;
mpp[sum]=ss;
}
}else if(s=="rm"){
cin>>ss;
int aa=mp[ss];
mp.erase(ss);
mpp.erase(aa);
}else if(s=="rename"){
cin>>ss>>sss;
if(mp.count(ss) && !mp.count(sss)){
int aa=mp[ss];
mpp[aa]=sss;
mp.erase(ss);
mp[sss]=aa;
}
}else{
map <int,string>::iterator it;
for(it=mpp.begin();it!=mpp.end();it++){
cout<<(it->second)<<endl;
}
}
}
return 0;
}
模板题dfs,根据题意不需要建立vis标记
#include
using namespace std;
const long long mod=1e9+7;
long long n,k,a[10005],cnt;
void pr(){
long long y=0;
for(int i=1;i<=n;i++){
y=y*10+a[i];
}
if(y%k==0)cnt++;
}
void dfs(int sum){
if(sum>n){
pr();
return ;
}
for(int i=1;i<=6;i++){
a[sum]=i;
dfs(sum+1);
}
}
int main(){
cin>>n>>k;
dfs(1);
cout<<cnt%mod;
return 0;
}
暴力
#include
using namespace std;
int aa[100];
int ans=0;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
int a;
cin>>a;
aa[a]++;
}
for(int i=1;i<=m;i++){
int a;
cin>>a;
aa[a]++;
}
for(int i=1;i<=21;i++){
if(aa[i]>1)ans++;
}
cout<<ans;
return 0;
}
暴力模拟
#include
using namespace std;
long long n,k,a[10050000],ans;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]*a[j]<=k)ans++;
}
}
cout<<ans;
return 0;
}
tolower:字符串转小写
toupper:字符串转大写
b.find(a) 在字符串b中查询有没有a字符串,返回地址,没有返回-1
b.find(a,i); 在字符串b第i个下标中查询有没有a字符串,返回地址,没有返回-1
#include
using namespace std;
int t,n,m,ans;
string a,b;
int main(){
cin>>t;
while(t--){
cin>>n>>m;
cin>>a>>b;
for(int i=0;i<n;i++){
a[i]=tolower(a[i]);
}
for(int i=0;i<m;i++){
b[i]=tolower(b[i]);
}
int x;
for(int i=0;i<m;i++){
x=b.find(a,i);
if(x!=-1){
ans++;
i=x;
}
}
cout<<ans<<endl;
ans=0;
}
return 0;
}
不会
贪心s双指针思想,排序后用最多钱的买最贵的
#include
using namespace std;
int n,m,ans;
long long w[100005],c[100005];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>w[i];
}
for(int i=1;i<=m;i++){
cin>>c[i];
}
sort(w+1,w+1+n);
sort(c+1,c+1+m);
int l=n;
for(int i=m;i>=1;i--){
if(w[l]>=c[i]){
ans++;
if(l==0)break;
l--;
}
}
cout<<ans;
return 0;
}
#include
using namespace std;
int n;
map<int,int>cnt;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int ai,bi;
cin>>ai>>bi;
cnt[ai]++;
if(ai!=ai^bi)cnt[ai^bi]++;
}
int maxx=-1,ans;
for(map<int,int>::iterator it=cnt.begin();it!=cnt.end();it++){
int x=it->first;
int y=it->second;
if(y>maxx){
maxx=y;
ans=x;
}
}
cout<<ans;
return 0;
}