太水了,就不分开了,一个个随便说说好了
A
二叉树有个性质,节点序号为n的子节点序号分别为2n和2n+1
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int a,b;
while(cin>>a>>b){
while(a!=b){
if(a>b){
a/=2;
}else if(b>a){
b/=2;
}
}
cout<<a<<endl;
}
return 0;
}
B
计数排序的改版?
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
//ios::sync_with_stdio(false);
int a,b,c;
string s;
while(getline(cin,s)){
a=b=c=0;
for(int i=0;i<s.size();++i){
if(s[i]=='1'){
++a;
}else if(s[i]=='2'){
++b;
}else if(s[i]=='3'){
++c;
}
}
while(b--){
cout<<'2';
}while(a--){
cout<<'1';
}while(c--){
cout<<'3';
}
cout<<endl;
}
return 0;
}
C
唔,STL有
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
struct node{
int a,b;
};
bool cmp(node a,node b){
return a.a<b.a;
}
node arr[10*N];
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin>>n){
for(int i=0;i<n;++i){
cin>>arr[i].a>>arr[i].b;
}
stable_sort(arr,arr+n,cmp);
for(int i=0;i<n;++i){
cout<<arr[i].a<<' '<<arr[i].b<<endl;
}
}
return 0;
}
D
数据很水,直接模拟过就好了
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
map<int,int> m;
int n,temp;
while(cin>>n){
m.clear();
for(int i=0;i<n;++i){
cin>>temp;
m[temp]++;
}
for(map<int,int>::iterator a=m.begin(),b=m.end();a!=b;++a){
if(a->second%2){
cout<<a->first<<endl;
break;
}
}
}
return 0;
}
本来应该是考验这个性质的:如果对一串序列连续使用异或,结果相当于出现次数为奇数个的数连续使用异或
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,num,temp;
while(cin>>n){
num=0;
for(int i=0;i<n;++i){
cin>>temp;
num^=temp;
}
cout<<num<<endl;
}
return 0;
}
E
输入统计然后遍历
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,m,ans,temp,per;
map<int,int> mp;
while(cin>>n>>m){
mp.clear();
ans=-1;
for(int i=0;i<m;++i){
cin>>temp;
mp[temp]++;
}
for(map<int,int>::iterator a=mp.begin(),b=mp.end();a!=b;++a){
if(a->second>ans){
ans=a->second;
per=a->first;
}
}
cout<<per<<endl;
}
return 0;
}
F
输入排序然后输出
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
double gra[1001000];
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin>>n){
for(int i=0;i<n;++i){
cin>>gra[i];
}
sort(gra,gra+n,greater<double>());
cout<<fixed<<setprecision(2)<<gra[0]<<' '<<gra[1]<<' '<<gra[2]<<' '<<endl;
}
return 0;
}
G
基础的BFS
#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
int chessboard[330][330];
int opx[]={1,1,-1,-1,2,-2,2,-2};
int opy[]={2,-2,2,-2,1,1,-1,-1};
int main()
{
ios::sync_with_stdio(false);
int n,m,x,y,cnt,tempx,tempy;
queue<pair<pair<int,int>,int> > que;
while(~scanf("%d%d",&n,&m)){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
chessboard[i][j]=1;
}
}
scanf("%d%d",&x,&y);
que.push(make_pair(make_pair(x,y),0));
chessboard[x][y]=0;
scanf("%d%d",&x,&y);
while(!que.empty()){
tempx=que.front().first.first;
tempy=que.front().first.second;
cnt=que.front().second;
if(tempx==x&&tempy==y){
printf("%d\n",cnt);
break;
}
que.pop();
for(int i=0;i<8;++i){
if(tempx+opx[i]<=n&&0<tempx+opx[i]&&tempy+opy[i]<=m&&0<tempy+opy[i]&&chessboard[tempx+opx[i]][tempy+opy[i]]){
que.push(make_pair(make_pair(tempx+opx[i],tempy+opy[i]),cnt+1));
chessboard[tempx+opx[i]][tempy+opy[i]]=0;
}
}
}
if(que.empty()){
cout<<-1<<endl;
}
while(!que.empty()){
que.pop();
}
}
return 0;
}
H
寒假写的了……反正没难度
#include <stdio.h>
int main(void)
{
int day,T,t=0,n,i,j,exp,x;
scanf("%d",&T);
for(i=0;i<T;i++){
scanf("%d",&n);
for(j=exp=day=0;j<n;j++){
scanf("%1d",&x);
if(x){
t=1;
day++;
if(day<6){
exp+=10*day;
}else{
day-=5;
exp+=10*day;
}
}else{
t=0;
day=0;
}
}
if(exp>749){
printf("8\n");
}else{
printf("%d\n",(exp+50)/100);
}
}
return 0;
}
I
Emmmmmmmmmm
测试人品的时候到了
反正就是你输出一个大写字母,如果系统随机出来的和你一样就AC
推荐写脚本自动交……
J
象征性写一写
#include <stdio.h>
int main(void)
{
int i,left,right,up,down,T,x,y;
scanf("%d",&T);
for(i=0;i<T;i++){
scanf("%d %d",&x,&y);
scanf("%d %d %d %d",&left,&down,&right,&up);
if(x<=right&&x>=left&&y<=up&&y>=down){
if(x<right&&x>left&&y>down&&y<up){
printf("Inside\n");
}else{
printf("On\n");
}
}else{
printf("Outside\n");
}
}
return 0;
}
/**********************************************************************
Problem: 1007
User: CSUzick
Language: C
Result: AC
Time:0 ms
Memory:1092 kb
**********************************************************************/
K
稍微有点新意的题目
要数学期望最大,最好的方案是最好的配最好的,最坏的配最坏的,过程省略
顺便这里我为了能直接用sort不得以将二维顺序换了一下,顺便一提这样会影响效率
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
double num[11][101];
int main()
{
ios::sync_with_stdio(false);
int n,m;
while(cin>>n>>m&&(n||m)){
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
cin>>num[j][i];
}
}
for(int i=0;i<m;++i){
sort(num[i],num[i]+n);
}
double ans=0;
for(int i=0;i<n;++i){
double temp=1.0;
for(int j=0;j<m;++j){
temp*=num[j][i];
}
ans+=temp;
}
cout<<fixed<<setprecision(4)<<ans<<endl;
}
return 0;
}
L
这题我就是想放放我的打表程序(毕竟字符太多交不了23333333)
打表:
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
fwrite;
int i,j;
cout<<'{';
for(i=2;i<1299710;++i){
for(j=2;j<=i/2;++j){
if(!(i%j)){
break;
}
}if(j>i/2){
cout<<i<<',';
}
}
return 0;
}
本体:
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int prime[]={/*这里把上个代码输出的文件内容直接复制过来hhhh*/}
int main()
{
ios::sync_with_stdio(false);
int n,temp;
cin>>n;
while(n--){
cin>>temp;
auto a=lower_bound(prime,prime+100000,temp),b=upper_bound(prime,prime+100000,temp);
if(*a==temp){
cout<<0<<endl;
continue;
}--a;
cout<<*b-*a<<endl;
}
return 0;
}
能A的代码:
#include <bits/stdc++.h>
#define N 1299710
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
bool prime[N];
void griddle()//筛法求素数
{
mem(prime,true);
prime[0]=prime[1]=false;
for(int i=2;i<N;++i){
if(prime[i]){
for(int j=i+i;j<N;j+=i){
prime[j]=false;
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
int n,temp,ans1,ans2;
griddle();
cin>>n;
while(n--){
cin>>temp;
if(prime[temp]){
cout<<0<<endl;
continue;
}else{
ans1=ans2=temp;
while(!prime[++ans1]);
while(!prime[--ans2]);
cout<<ans1-ans2<<endl;
}
}
return 0;
}
M
其实只要前一个和后一个不一样就得重新统计了,所以直接这样写:
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
string line;
while(getline(cin,line)){
int t=1,ans=0;
for(int i=1;i<line.size();++i){
if(line[i]==line[i-1]){
++t;
ans=max(ans,t);
}else{
t=1;
}
}
cout<<ans<<endl;
}
return 0;
}
N
懒得说了
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int h1,h2,m1,m2,time1,time2,day=1;
while(cin>>h1>>m1>>h2>>m2){
time1=h1*60+m1;
time2=h2*60+m2;
time2-=time1;
if(time2<0){
cout<<"Day "<<day++<<": Joking"<<endl;
}else{
if(time2%30){
cout<<"Day "<<day++<<": "<<time2/30+1<<' '<<(time2/30+1)*30-time2<<endl;
}else{
cout<<"Day "<<day++<<": "<<time2/30<<' '<<0<<endl;
}
}
}
return 0;
}
O
没啥好说
#include <stdio.h>
#include <string.h>
int main()
{
int n,i;
char str[10];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",str);
if(strlen(str)==5){
printf("3\n");
}else if(str[0]=='o'&&str[1]=='n'||str[0]=='o'&&str[2]=='e'||str[1]=='n'&&str[2]=='e'){
printf("1\n");
}else{
printf("2\n");
}
}
return 0;
}
P
同上
#include <stdio.h>
int main()
{
int n,a,b,c,i;
double m,q,w,z;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%d%lf",&a,&b,&m);
q=(double)(a+b)/3;
w=a-q>a-(int)q+0.5?a-q-1:a-q;
z=m/q*w;
if(z<0){
z=0;
}
printf("%.0f\n",z);
}
return 0;
}
Q
学会用各种库来省力,比如stoi、atoi之类的(当然,得适度)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[20];
int n,T,i,j,key[100],s;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d\n",&T);
memset(key,0,sizeof(key));
for(j=0;j<T;j++){
gets(str);
if(str[0]=='L'){
key[j]=-1;
}else if(str[0]=='R'){
key[j]=1;
}else{
key[j]=key[atoi(str+8)-1];
}
}
s=0;
for(j=0;j<T;j++){
s+=key[j];
}
printf("%d\n",s);
}
return 0;
}
R
直接看代码比较容易理解
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
vector<string> name;
int t,n,cnt[1010],ans,j;
cin>>t;
while(t--){
cin>>n;
name.clear();
string temp;
for(int i=0;i<n;++i){
cin>>temp;
name.push_back(temp);
cnt[i]=0;
}
sort(name.begin(),name.end());
for(int i=0;i<n-1;++i){
for(j=0;j<name[i].size()&&j<name[i+1].size()&&name[i][j]==name[i+1][j];++j);
cnt[i+1]=max(cnt[i+1],j+1);
cnt[i]=max(cnt[i],j+1);
}
for(int i=ans=0;i<n;++i){
ans+=cnt[i];
// cout<<cnt[i]<<endl;
}
cout<<ans<<endl;
}
return 0;
}
S
Emmmmmm,substr是个好方法
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
//ios::sync_with_stdio(false);
int a,b,d,e;
string str;
while(cin>>a>>b>>d>>e){
cin>>str;
cout<<str.substr(e,a*b%d)<<endl;
}
return 0;
}