标签:自己 字符 flag har abs contest getc acm return
A:https://vjudge.net/contest/366415#problem
A是是找规律的题目,找几个数据就可以得出答案。或者自己一步步论证得出,做题的说话是一步步论证得出的。
#include<iostream> #include<cstdio> #include<set> #include<queue> #include<stack> #include<vector> #include<bitset> #include<cstring> #include<string> #include<algorithm> using namespace std; typedef long long ll; const int MAXN=1e5+10; inline int read(){ int x=0,y=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){ if(ch==‘-‘){ y=-1; } ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*y; } int main(){ int n, a, b; n=read(); a=read(); b=read(); if((a+b+1)>n) cout<<n-a<<endl; else cout<<b+1<<endl; return 0; }
D:https://vjudge.net/contest/366415#problem/D
根据题意:首字母小写,剩余大写或者全大写的字符串均反转。不要忘记全小写的情况!使用ASCII码进行转换。
#include<iostream> #include<cstdio> #include<set> #include<queue> #include<stack> #include<vector> #include<bitset> #include<cstring> #include<string> #include<algorithm> using namespace std; typedef long long ll; const int MAXN=1e5+10; inline int read(){ int x=0,y=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){ if(ch==‘-‘){ y=-1; } ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*y; } int main(){ char ss[150];int flag = 0, flag1 = 1; scanf("%s",ss); //cout<<ss.length()<<endl; //for(int i = 0;i<strlen(ss);i++) // printf("%d\n",ss[i]); if(ss[0]<=90){ flag = 1; } for(int i = 1; i < strlen(ss);i++){ if(ss[i]>=97) flag1 = 0; } //daxie1 if(flag==1&&flag1==1){ for(int i = 0;i<strlen(ss);i++){ //cout<<ss[i]+32; printf("%c",ss[i]+32); } cout<<endl; } // else if(flag == 0&&flag1 == 1){ //cout<<ss[0]-32<<endl; printf("%c",ss[0]-32); for(int i =1;i<strlen(ss);i++){ printf("%c",ss[i]+32); //cout<<ss[i]+32<<endl; } cout<<endl; } else if(flag == 1&&flag1 == 0){ for(int i = 0;i<strlen(ss);i++) printf("%c",ss[i]); cout<<endl; } else{ cout<<ss<<endl; } /// cout<<flag<<" "<<flag1<<endl; return 0; }
E:https://vjudge.net/contest/366415#problem/E
E题题意就是计算匹配相反数,不能自己匹配自己。该解法使用了,两个数组,每个数组存该索引的数字或相反数的个数,然后两数相乘。为0的情况使用公式n*(n-1)/2计算,最好把两个结果相加得出结果。
#include<iostream> #include<cstdio> #include<set> #include<queue> #include<stack> #include<vector> #include<bitset> #include<cstring> #include<string> #include<algorithm> using namespace std; typedef long long ll; const int MAXN=1e5+10; inline int read(){ int x=0,y=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){ if(ch==‘-‘){ y=-1; } ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*y; } ll n, a[MAXN],b[MAXN],x=0,y=0,zero=0,res=0; int main(){ n=read(); for(int i = 1;i <= n;i++){ ll t; t=read(); if(t>0) a[t]++; else if(t<0) b[abs(t)]++; else zero++; } for(int i = 0;i<=10;i++){ res += a[i]*b[i]; a[i]=0;b[i]=0; } if(zero>1){ res += zero*(zero-1)/2; } cout<<res<<endl; return 0; }
F:https://vjudge.net/contest/366415#problem/F
该题就是一个求组合数的题,不要忘记男生和女生人数刚好互补。
#include<iostream> #include<cstdio> #include<set> #include<queue> #include<stack> #include<vector> #include<bitset> #include<cstring> #include<string> #include<algorithm> using namespace std; typedef long long ll; long long comb(int n,int m) { long long fac=1; for (int i=1;i<=m;i++) { fac=fac*(n-m+i)/i; } return fac; } int n, m, t;ll res=0; int main(){ cin>>n>>m>>t; for(int i = 4;i<=t-1;i++){ res += comb(n,i)*comb(m,t-i); } cout<<res<<endl; return 0; }
标签:自己 字符 flag har abs contest getc acm return
原文地址:https://www.cnblogs.com/aixiaodezsh/p/12662460.html