提交 f1d08c9c 编写于 作者: 每日一练社区's avatar 每日一练社区

update algorithm exercises

上级 e434a100
#include<iostream> #include <iostream>
using namespace std; using namespace std;
int use[10]; int use[10];
int ans, e[10][10], father[10]; int ans, e[10][10], father[10];
...@@ -15,8 +15,7 @@ void init() ...@@ -15,8 +15,7 @@ void init()
e[6][1] = e[6][5] = e[6][7] = 1; e[6][1] = e[6][5] = e[6][7] = 1;
} }
int find(int a) //并查集
int find(int a)//并查集
{ {
if (father[a] == a) if (father[a] == a)
return a; return a;
...@@ -24,9 +23,8 @@ int find(int a)//并查集 ...@@ -24,9 +23,8 @@ int find(int a)//并查集
return father[a]; return father[a];
} }
//深度遍历 //深度遍历
void dfs(int d) void dfs(int d)
{ {
if (d > 7) if (d > 7)
{ {
......
#include<bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
int bei[10];//备用 int bei[10]; //备用
map<long long,int>mp; map<long long, int> mp;
int main() int main()
{ {
int a[9]={1,2,3,4,5,6,7,8,9}; int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int res=0; int res = 0;
do do
{ {
for(int i=1;i<9;i++) for (int i = 1; i < 9; i++)
{ {
memset(bei,0,sizeof(bei));//分配空间 memset(bei, 0, sizeof(bei)); //分配空间
long long int ans,left=0,right=0,t=0,x=0,y=0; long long int ans, left = 0, right = 0, t = 0, x = 0, y = 0;
for(int j=0;j<=i;j++) for (int j = 0; j <= i; j++)
{ {
left=left*10+a[j]; left = left * 10 + a[j];
} }
x=left; x = left;
x=x*10; x = x * 10;
for(int k=i+1;k<9;k++) for (int k = i + 1; k < 9; k++)
{ {
right=right*10+a[k]; right = right * 10 + a[k];
x=x*10+a[k]; x = x * 10 + a[k];
} }
y=right; y = right;
y=y*10; y = y * 10;
for(int j=0;j<=i;j++) for (int j = 0; j <= i; j++)
y=y*10+a[j]; y = y * 10 + a[j];
ans=left*right; ans = left * right;
long long int ff=ans; long long int ff = ans;
while(ans>0) while (ans > 0)
{ {
int x=ans%10; int x = ans % 10;
ans=ans/10; ans = ans / 10;
if(bei[x]==0&&x!=0) if (bei[x] == 0 && x != 0)
{ {
bei[x]=1; bei[x] = 1;
t++; t++;
} }
} }
if(t==9&&mp.count(x)==0&&mp.count(y)==0) if (t == 9 && mp.count(x) == 0 && mp.count(y) == 0)
{ {
res++; res++;
mp[x]=1; mp[x] = 1;
mp[y]=1; mp[y] = 1;
} }
} }
}while(next_permutation(a,a+9));//全排列 } while (next_permutation(a, a + 9)); //全排列
cout<<res<<endl; cout << res << endl;
return 0; return 0;
} }
#include <bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
int main(){ int main()
{
set<string> s; set<string> s;
string str; string str;
cin >> str; cin >> str;
for(int i = 0; i < str.size(); i ++) for (int i = 0; i < str.size(); i++)
for(int j = i; j < str.size(); j ++) for (int j = i; j < str.size(); j++)
s.insert(str.substr(i, j - i + 1)); s.insert(str.substr(i, j - i + 1));
cout << s.size(); cout << s.size();
return 0; return 0;
......
#include<iostream> #include <iostream>
using namespace std; using namespace std;
int main(){ int main()
int count2=0,count5=0; {
int count2 = 0, count5 = 0;
int num; int num;
for(int i=0;i<100;i++){ for (int i = 0; i < 100; i++)
cin>>num; {
while(num%5==0){ cin >> num;
while (num % 5 == 0)
{
count5++; count5++;
num/=5; num /= 5;
} }
while(num%2==0){ while (num % 2 == 0)
{
count2++; count2++;
num/=2; num /= 2;
} }
} }
int ans=count2<count5?count2:count5; int ans = count2 < count5 ? count2 : count5;
cout<<ans; cout << ans;
return 0; return 0;
} }
#include<iostream> #include <iostream>
#include <vector> #include <vector>
#include<algorithm> #include <algorithm>
using namespace std; using namespace std;
int main(){ int main()
int n,k; {
int n, k;
long long ans; long long ans;
cin>>n>>k; cin >> n >> k;
vector<long long>num; vector<long long> num;
for(int i=0;i<n;i++){ for (int i = 0; i < n; i++)
{
int temp; int temp;
cin>>temp; cin >> temp;
num.push_back(temp); num.push_back(temp);
} }
sort(num.begin(),num.end()); sort(num.begin(), num.end());
if(k%2!=0){ if (k % 2 != 0)
ans=num.back(); {
k=k-1; ans = num.back();
k = k - 1;
num.pop_back(); num.pop_back();
} }
else else
ans=1; ans = 1;
while(k>0){ while (k > 0)
if((num[0]*num[1])>num.at(num.size()-1)*num.at(num.size()-2)){ {
ans=ans*num[0]*num[1]%1000000009; if ((num[0] * num[1]) > num.at(num.size() - 1) * num.at(num.size() - 2))
num.erase(num.begin(),num.begin()+1); {
ans = ans * num[0] * num[1] % 1000000009;
num.erase(num.begin(), num.begin() + 1);
} }
else{ else
ans=ans*num.at(num.size()-1)*num.at(num.size()-2)%1000000009; {
ans = ans * num.at(num.size() - 1) * num.at(num.size() - 2) % 1000000009;
num.pop_back(); num.pop_back();
num.pop_back(); num.pop_back();
} }
k-=2; k -= 2;
} }
cout<<ans; cout << ans;
return 0; return 0;
} }
#include<bits/stdc++.h> #include <bits/stdc++.h>
#include<string> #include <string>
#include<queue> #include <queue>
#include<set> #include <set>
#include<cstring> #include <cstring>
#include<cmath> #include <cmath>
#include<algorithm> #include <algorithm>
#define MAX 1000000000 #define MAX 1000000000
using namespace std; using namespace std;
int n,k,a[100010]; int n, k, a[100010];
int b[4]; int b[4];
int flag=0; int flag = 0;
void dfs(int a[],int n,int s){ void dfs(int a[], int n, int s)
if(flag==1) return; {
if(s==4){ if (flag == 1)
int sum=b[1]+b[2]+b[3]; return;
if(sum%k==0){ if (s == 4)
flag=1; {
cout<<sum<<endl; int sum = b[1] + b[2] + b[3];
if (sum % k == 0)
{
flag = 1;
cout << sum << endl;
} }
return; return;
} }
for(int i=1;i<=n;i++){ for (int i = 1; i <= n; i++)
if(a[i]<a[s-1]){ {
b[s]=a[i]; if (a[i] < a[s - 1])
dfs(a,n,s+1); {
b[s] = a[i];
dfs(a, n, s + 1);
} }
} }
} }
int main(){ int main()
cin>>n>>k; {
a[0]=MAX; cin >> n >> k;
for(int i=1;i<=n;i++) a[0] = MAX;
cin>>a[i]; for (int i = 1; i <= n; i++)
sort(a+1,a+n+1); cin >> a[i];
reverse(a+1,a+n+1); sort(a + 1, a + n + 1);
dfs(a,n,1); reverse(a + 1, a + n + 1);
dfs(a, n, 1);
return 0; return 0;
} }
import java.util.Scanner; import java.util.Scanner;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
int mod=123456789; int mod=123456789;
Scanner s = new Scanner(System.in); Scanner s = new Scanner(System.in);
int n=s.nextInt();long result=0; int n=s.nextInt();long result=0;
......
#include<stdio.h> #include <stdio.h>
#include<stdbool.h> #include <stdbool.h>
int ans = 0; int ans = 0;
int nums[10]; int nums[10];
...@@ -8,24 +8,24 @@ bool visited[10]; ...@@ -8,24 +8,24 @@ bool visited[10];
void judge() void judge()
{ {
int i; int i;
if (nums[0] + (double)nums[1]/nums[2] + (double)(nums[3] *100 + nums[4]* 10 + nums[5])/(nums[6]*100 + nums[7]*10 + nums[8]) == 10) if (nums[0] + (double)nums[1] / nums[2] + (double)(nums[3] * 100 + nums[4] * 10 + nums[5]) / (nums[6] * 100 + nums[7] * 10 + nums[8]) == 10)
{ {
printf("%d + %d/%d + %d%d%d/%d%d%d",nums[0],nums[1],nums[2],nums[3],nums[4],nums[5],nums[6],nums[7],nums[8]); printf("%d + %d/%d + %d%d%d/%d%d%d", nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], nums[6], nums[7], nums[8]);
printf("\n"); printf("\n");
ans++; ans++;
} }
} }
void dfs(int index) void dfs(int index)
{ {
if(index >= 9) if (index >= 9)
{ {
judge(); judge();
return ; return;
} }
int i; int i;
for(i=1;i<10;i++) for (i = 1; i < 10; i++)
{ {
if(visited[i] == false) if (visited[i] == false)
{ {
visited[i] = true; visited[i] = true;
nums[index] = i; nums[index] = i;
...@@ -37,6 +37,6 @@ void dfs(int index) ...@@ -37,6 +37,6 @@ void dfs(int index)
int main() int main()
{ {
dfs(0); dfs(0);
printf("%d\n",ans); printf("%d\n", ans);
return 0; return 0;
} }
# include <stdio.h> #include <stdio.h>
void bigmul(int x, int y, int r[]) void bigmul(int x, int y, int r[])
{ {
int base = 10000; int base = 10000;
int x2 = x / base; int x2 = x / base;
int x1 = x % base; int x1 = x % base;
int y2 = y / base; int y2 = y / base;
int y1 = y % base; int y1 = y % base;
int n1 = x1 * y1; int n1 = x1 * y1;
int n2 = x1 * y2; int n2 = x1 * y2;
int n3 = x2 * y1; int n3 = x2 * y1;
int n4 = x2 * y2; int n4 = x2 * y2;
r[3] = n1 % base; r[3] = n1 % base;
r[2] = n1 / base + n2 % base + n3 % base; r[2] = n1 / base + n2 % base + n3 % base;
r[1] = n2 / base + n3 / base + n4 % base; // 填空 r[1] = n2 / base + n3 / base + n4 % base; // 填空
r[0] = n4 / base; r[0] = n4 / base;
r[1] += r[2] / base; // 填空 r[1] += r[2] / base; // 填空
r[2] = r[2] % base; r[2] = r[2] % base;
r[0] += r[1] / base; r[0] += r[1] / base;
r[1] = r[1] % base; r[1] = r[1] % base;
} }
int main(int argc, char *argv[])
int main(int argc, char* argv[])
{ {
int x[] = {0,0,0,0}; int x[] = {0, 0, 0, 0};
bigmul(87654321, 12345678, x); bigmul(87654321, 12345678, x);
printf("%d%d%d%d\n", x[0],x[1],x[2],x[3]); printf("%d%d%d%d\n", x[0], x[1], x[2], x[3]);
return 0; return 0;
} }
\ No newline at end of file
#include<bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))//不能mem(double) #define mem(a, b) memset(a, b, sizeof(a)) //不能mem(double)
#define ll long long #define ll long long
const double eps=3e-8; const double eps = 3e-8;
const int mod=10; const int mod = 10;
const int maxn=10005;//最好数量范围大一点;1e4+5 && long long const int maxn = 10005; //最好数量范围大一点;1e4+5 && long long
vector<int>ed[maxn];//存储每个点的邻接点 vector<int> ed[maxn]; //存储每个点的邻接点
ll edge[maxn][maxn];//存储每个边值 ll edge[maxn][maxn]; //存储每个边值
ll dis[maxn];//存储bfs中从node点开始的路径长 ll dis[maxn]; //存储bfs中从node点开始的路径长
ll sum=0; ll sum = 0;
int bfs(int node){ int bfs(int node)
mem(dis,-1); {
queue<int>que; mem(dis, -1);
queue<int> que;
que.push(node); que.push(node);
int ans=node; int ans = node;
dis[node]=0; dis[node] = 0;
while(!que.empty()){ while (!que.empty())
int now=que.front(); {
int now = que.front();
que.pop(); que.pop();
for(int i=0;i<ed[now].size();i++){ for (int i = 0; i < ed[now].size(); i++)
int temp=ed[now][i]; {
if(dis[temp]<0){ int temp = ed[now][i];
dis[temp]=dis[now]+edge[now][temp]; if (dis[temp] < 0)
if(dis[temp]>sum){ {
ans=temp; dis[temp] = dis[now] + edge[now][temp];
sum=dis[temp]; if (dis[temp] > sum)
{
ans = temp;
sum = dis[temp];
} }
que.push(temp); que.push(temp);
} }
...@@ -32,25 +37,27 @@ int bfs(int node){ ...@@ -32,25 +37,27 @@ int bfs(int node){
} }
return ans; return ans;
} }
int main(){ int main()
freopen("in4.txt","r",stdin); {
int n,a,b; freopen("in4.txt", "r", stdin);
int n, a, b;
ll c; ll c;
scanf("%d",&n); scanf("%d", &n);
for(int i=1;i<n;i++){ for (int i = 1; i < n; i++)
scanf("%d%d%lld",&a,&b,&c); {
scanf("%d%d%lld", &a, &b, &c);
ed[a].push_back(b); ed[a].push_back(b);
ed[b].push_back(a); ed[b].push_back(a);
edge[a][b]=c; edge[a][b] = c;
edge[b][a]=c; edge[b][a] = c;
} }
int starta=1; int starta = 1;
int endnode,startnode; int endnode, startnode;
sum=0; sum = 0;
endnode=bfs(starta); endnode = bfs(starta);
sum=0; sum = 0;
startnode=bfs(endnode); startnode = bfs(endnode);
///cout<<endnode<<" "<<startnode<<" "<<sum<<endl; ///cout<<endnode<<" "<<startnode<<" "<<sum<<endl;
double ans=sum*(sum+1.0)/2+10.0*sum; double ans = sum * (sum + 1.0) / 2 + 10.0 * sum;
printf("%.0f\n",ans); printf("%.0f\n", ans);
} }
#include<stdio.h> #include <stdio.h>
#include<iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int n; int n;
cin>>n; cin >> n;
int sum=0; int sum = 0;
int top=0; int top = 0;
int low=100; int low = 100;
int score; int score;
for(int i=0;i<n;i++){ for (int i = 0; i < n; i++)
cin>>score; {
if(score>top)top=score; cin >> score;
if(score<low)low=score; if (score > top)
sum+=score; top = score;
if (score < low)
low = score;
sum += score;
} }
printf("%d\n%d\n%.2lf",top,low,(sum*1.0/n)); printf("%d\n%d\n%.2lf", top, low, (sum * 1.0 / n));
return 0; return 0;
} }
#include<iostream> #include <iostream>
using namespace std; using namespace std;
int main(){ int main()
struct student{ {
struct student
{
string xm; string xm;
int xh; int xh;
double yy; double yy;
...@@ -10,19 +12,25 @@ int main(){ ...@@ -10,19 +12,25 @@ int main(){
}; };
student a[1000]; student a[1000];
int n; int n;
double sum=0,min=301,max=0; double sum = 0, min = 301, max = 0;
string mins,maxs; string mins, maxs;
cin>>n; cin >> n;
for(int i=0;i<n;i++){ for (int i = 0; i < n; i++)
cin>>a[i].xm>>a[i].xh>>a[i].yy>>a[i].sx>>a[i].cpp; {
sum=a[i].yy+a[i].sx+a[i].cpp; cin >> a[i].xm >> a[i].xh >> a[i].yy >> a[i].sx >> a[i].cpp;
if(min>sum){ sum = a[i].yy + a[i].sx + a[i].cpp;
min=sum;mins=a[i].xm; if (min > sum)
{
min = sum;
mins = a[i].xm;
} }
if(max<sum){ if (max < sum)
max=sum;maxs=a[i].xm; {
max = sum;
maxs = a[i].xm;
} }
} }
cout<<maxs<<endl<<mins; cout << maxs << endl
<< mins;
return 0; return 0;
} }
#include<cstdio> #include <cstdio>
#define N 70 #define N 70
void f(char a[][N], int rank, int row, int col) void f(char a[][N], int rank, int row, int col)
{ {
if(rank==1){ if (rank == 1)
{
a[row][col] = '*'; a[row][col] = '*';
return; return;
} }
int w = 1; int w = 1;
int i; int i;
for(i=0; i<rank-1; i++) w *= 2; for (i = 0; i < rank - 1; i++)
f(a, rank - 1, row, col + w/2); //(填空)处理顶上三角形 w *= 2;
f(a, rank-1, row+w/2, col); //f(0,5,16,0) //处理左下角 f(a, rank - 1, row, col + w / 2); //(填空)处理顶上三角形
f(a, rank-1, row+w/2, col+w);//f(0,5,16,16) //处理右下角 f(a, rank - 1, row + w / 2, col); //f(0,5,16,0) //处理左下角
f(a, rank - 1, row + w / 2, col + w); //f(0,5,16,16) //处理右下角
} }
int main() int main()
{ {
char a[N][N]; char a[N][N];
int i,j; int i, j;
for(i=0;i<N;i++) for (i = 0; i < N; i++)
for(j=0;j<N;j++) a[i][j] = ' '; for (j = 0; j < N; j++)
a[i][j] = ' ';
//f(a,6,0,0); //f(a,6,0,0);
f(a, 4, 0, 0); f(a, 4, 0, 0);
for(i=0; i<N; i++){ for (i = 0; i < N; i++)
for(j=0; j<N; j++) printf("%c",a[i][j]); {
for (j = 0; j < N; j++)
printf("%c", a[i][j]);
printf("\n"); printf("\n");
} }
return 0; return 0;
} }
\ No newline at end of file
#include<stdio.h> #include <stdio.h>
#include<string.h> #include <string.h>
#include<math.h> #include <math.h>
#include<algorithm> #include <algorithm>
using namespace std; using namespace std;
typedef long long ll; typedef long long ll;
const ll maxn=1e6+50; const ll maxn = 1e6 + 50;
double a[1050][1050]; double a[1050][1050];
int main() int main()
{ {
for(ll i=1;i<=29;i++) for (ll i = 1; i <= 29; i++)
{ {
for(ll j=1;j<=i;j++) for (ll j = 1; j <= i; j++)
{ {
scanf("%lf",&a[i][j]); scanf("%lf", &a[i][j]);
} }
} }
for(ll i=1;i<=29;i++) for (ll i = 1; i <= 29; i++)
{ {
for(ll j=1;j<=i;j++) for (ll j = 1; j <= i; j++)
{ {
a[i+1][j]+=(0.5*a[i][j]); a[i + 1][j] += (0.5 * a[i][j]);
a[i+1][j+1]+=(0.5*a[i][j]); a[i + 1][j + 1] += (0.5 * a[i][j]);
} }
} }
double minn=1000000000,maxx=-1; double minn = 1000000000, maxx = -1;
for(ll i=1;i<=30;i++) for (ll i = 1; i <= 30; i++)
{ {
maxx=max(maxx,a[30][i]); maxx = max(maxx, a[30][i]);
minn=min(minn,a[30][i]); minn = min(minn, a[30][i]);
printf("%lf\n",a[30][i]); printf("%lf\n", a[30][i]);
} }
printf("%lf\n",maxx*2086458231/minn); printf("%lf\n", maxx * 2086458231 / minn);
} }
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int a[10000],N,i,ans = 0; int a[10000], N, i, ans = 0;
void findAns(int a[],int start,int An)//国家可派出数组a,当前派出第start国家,已经组合An人 void findAns(int a[], int start, int An) //国家可派出数组a,当前派出第start国家,已经组合An人
{ {
if(start == N)//找到最后一个国家后 if (start == N) //找到最后一个国家后
{ {
if(An == 5) ans++;//如果组合人数An等于派出人数5; if (An == 5)
return; ans++; //如果组合人数An等于派出人数5;
return;
} }
for(i = 0;i<=a[start];i++)//派出第n个国家人数的人数,需检查人数是否满足规范 for (i = 0; i <= a[start]; i++) //派出第n个国家人数的人数,需检查人数是否满足规范
{ {
findAns(a,start+1,An+i);//查找下一个国家,记录已经组合数An findAns(a, start + 1, An + i); //查找下一个国家,记录已经组合数An
} }
} }
int main() int main()
{ {
//输入规模及数据 //输入规模及数据
cin>>N; cin >> N;
for(i = 0;i < N;i++) for (i = 0; i < N; i++)
{ {
cin>>a[i]; cin >> a[i];
} }
findAns(a,0,0); findAns(a, 0, 0);
cout<<ans<<endl; cout << ans << endl;
return 0; return 0;
} }
//搭积木 768 //搭积木 768
#include<bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
int row = 4,col; int row = 4, col;
int seq[5][8];//下标从1开始 int seq[5][8]; //下标从1开始
int tmp[11]; int tmp[11];
int cnt = 0; int cnt = 0;
bool used[10]; bool used[10];
void change(){//将一维数组转换成二维数组 void change()
{ //将一维数组转换成二维数组
int cur = 1; int cur = 1;
for(int i = 1; i <= row ; ++i){ for (int i = 1; i <= row; ++i)
for(int j = 1; j <= i; ++j){ {
seq[i][j] = tmp[cur ++]; for (int j = 1; j <= i; ++j)
{
seq[i][j] = tmp[cur++];
} }
} }
} }
bool judge(){//判断二维数组是否符合条件 bool judge()
for(int i = 1; i <= row - 1; ++i){ { //判断二维数组是否符合条件
for(int j = 1; j <= i ; ++j){ for (int i = 1; i <= row - 1; ++i)
if(seq[i][j] > seq[i + 1][j] || seq[i][j] > seq[i + 1][j + 1]) return false; {
} for (int j = 1; j <= i; ++j)
{
if (seq[i][j] > seq[i + 1][j] || seq[i][j] > seq[i + 1][j + 1])
return false;
}
} }
return true; return true;
} }
int ans = 0; int ans = 0;
void dfs(int idx){ void dfs(int idx)
//idx:当前要操作的下标(从1开始) {
if(idx == 11){ //idx:当前要操作的下标(从1开始)
if (idx == 11)
{
change(); change();
if(judge()){ if (judge())
{
cnt++; cnt++;
return ; return;
} }
return ; return;
} }
for(int i = 0; i <= 9; ++i){ for (int i = 0; i <= 9; ++i)
if(!used[i]){ {
if (!used[i])
{
tmp[idx] = i; tmp[idx] = i;
used[i] = true; used[i] = true;
dfs(idx + 1); dfs(idx + 1);
...@@ -46,9 +58,10 @@ void dfs(int idx){ ...@@ -46,9 +58,10 @@ void dfs(int idx){
} }
} }
int main(){ int main()
memset(used,false,sizeof(used)); {
memset(used, false, sizeof(used));
dfs(1); dfs(1);
cout<<cnt<<endl; cout << cnt << endl;
return 0; return 0;
} }
\ No newline at end of file \ No newline at end of file
...@@ -4,8 +4,8 @@ int main() //计数排序 ...@@ -4,8 +4,8 @@ int main() //计数排序
{ {
char s[1000]; char s[1000];
scanf("%s", &s); scanf("%s", &s);
int len = strlen(s); //获取字符串s的长度 int len = strlen(s); //获取字符串s的长度
int helper[256] = { 0 }; //ascll范围在0~255之间(包括0和255) int helper[256] = {0}; //ascll范围在0~255之间(包括0和255)
int max = 0, min = len; int max = 0, min = len;
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
...@@ -17,7 +17,7 @@ int main() //计数排序 ...@@ -17,7 +17,7 @@ int main() //计数排序
{ {
max = helper[i]; max = helper[i];
} }
if (helper[i] < min&&helper[i] != 0) if (helper[i] < min && helper[i] != 0)
{ {
min = helper[i]; min = helper[i];
} }
......
#include<cstdio> #include <cstdio>
#include<iostream> #include <iostream>
using namespace std; using namespace std;
int d, a1[4]; int d, a1[4];
int d1(int *a1) { int d1(int *a1)
{
int sum = a1[0]; int sum = a1[0];
for (int i = 1; i < 4; i++) { for (int i = 1; i < 4; i++)
if (sum % a1[i] != 0) return i; {
if (sum % a1[i] != 0)
return i;
} }
return 0; return 0;
} }
int getS(int *a1) { int getS(int *a1)
{
int sum = 0, ss = 1; int sum = 0, ss = 1;
while(d1(a1) != 0) { while (d1(a1) != 0)
{
int index = d1(a1); int index = d1(a1);
a1[0] = a1[0] * a1[index]; a1[0] = a1[0] * a1[index];
ss = a1[index]; ss = a1[index];
} }
for (int i = 1; i < 4; i++) { for (int i = 1; i < 4; i++)
sum += (a1[0]/a1[i]); {
sum += (a1[0] / a1[i]);
} }
return sum+ss; return sum + ss;
} }
int main() { int main()
for (int sum = 20; sum >= 1; sum--) { {
for (int a = 1; a <= 20; a++) { for (int sum = 20; sum >= 1; sum--)
for (int b = 1; b <= 20; b++) { {
for (int c = 1; c <= 20; c++) { for (int a = 1; a <= 20; a++)
{
for (int b = 1; b <= 20; b++)
{
for (int c = 1; c <= 20; c++)
{
a1[0] = sum, a1[1] = a, a1[2] = b, a1[3] = c; a1[0] = sum, a1[1] = a, a1[2] = b, a1[3] = c;
if (getS(a1) == a1[0] && a > b && b > c && sum > a) { if (getS(a1) == a1[0] && a > b && b > c && sum > a)
{
printf("%d, %d, %d, %d, 0\n", sum, a, b, c); printf("%d, %d, %d, %d, 0\n", sum, a, b, c);
} }
} }
} }
} }
......
#include<iostream> #include <iostream>
#include<cstdio> #include <cstdio>
#include<cstring> #include <cstring>
using namespace std; using namespace std;
typedef long long ll; typedef long long ll;
const int N=1e3+5; const int N = 1e3 + 5;
const int mod=100000007; const int mod = 100000007;
int n,s,a,b,up; int n, s, a, b, up;
ll v; ll v;
int dp[2][N*(N+1)/2],now; int dp[2][N * (N + 1) / 2], now;
int ans; int ans;
int main() int main()
{ {
scanf("%d%d%d%d",&n,&s,&a,&b); scanf("%d%d%d%d", &n, &s, &a, &b);
dp[now][0]=1; dp[now][0] = 1;
for(int i=1;i<n;++i)//只有n-1个增量 for (int i = 1; i < n; ++i) //只有n-1个增量
{ {
now=!now; now = !now;
up=i*(i+1)/2; up = i * (i + 1) / 2;
for(int j=0;j<=up;++j)//01背包 容量 方案数 for (int j = 0; j <= up; ++j) //01背包 容量 方案数
{ {
dp[now][j]=dp[!now][j]; dp[now][j] = dp[!now][j];
if(j>=i)dp[now][j]=(dp[now][j]+dp[!now][j-i])%mod; if (j >= i)
dp[now][j] = (dp[now][j] + dp[!now][j - i]) % mod;
} }
} }
for(int i=0;i<=up;++i)//s-i*a-(n*(n-1)/2-i)*b 是否被n整除 for (int i = 0; i <= up; ++i) //s-i*a-(n*(n-1)/2-i)*b 是否被n整除
{ {
v=1ll*s-1ll*i*a+1ll*(up-i)*b; v = 1ll * s - 1ll * i * a + 1ll * (up - i) * b;
if(v%n==0)ans=(ans+dp[now][i])%mod; if (v % n == 0)
ans = (ans + dp[now][i]) % mod;
} }
printf("%d\n",ans); printf("%d\n", ans);
return 0; return 0;
} }
\ No newline at end of file
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int num[5][1010]={0}; int num[5][1010] = {0};
int dp(int k,int n) int dp(int k, int n)
{ {
int res=10000; int res = 10000;
if(n==0) if (n == 0)
return 0; return 0;
if(k==1) if (k == 1)
return n; return n;
if(num[k][n]) if (num[k][n])
return num[k][n]; return num[k][n];
for(int i=1;i<=n;i++) for (int i = 1; i <= n; i++)
{ {
res=min(res,max(dp(k-1,i-1),dp(k,n-i))+1); res = min(res, max(dp(k - 1, i - 1), dp(k, n - i)) + 1);
} }
num[k][n]=res; num[k][n] = res;
return res; return res;
} }
int main() int main()
{ {
cout<<dp(3,1000)<<endl; cout << dp(3, 1000) << endl;
return 0; return 0;
} }
\ No newline at end of file
#include<iostream> #include <iostream>
#include<vector> #include <vector>
using namespace std; using namespace std;
int main() int main()
{ {
vector<char>vc1; vector<char> vc1;
int i; int i;
for(i=0;i<2014;i++) for (i = 0; i < 2014; i++)
vc1.push_back('a'+(i%19)); vc1.push_back('a' + (i % 19));
while(vc1.size()!=1) while (vc1.size() != 1)
{ {
vector<char>vc2; vector<char> vc2;
cout<<vc1.size()<<endl; cout << vc1.size() << endl;
for(i=1;i<vc1.size();i+=2) for (i = 1; i < vc1.size(); i += 2)
vc2.push_back(vc1[i]); vc2.push_back(vc1[i]);
vc1.assign(vc2.begin(),vc2.end()); vc1.assign(vc2.begin(), vc2.end());
cout<<vc1.size()<<endl; cout << vc1.size() << endl;
} }
cout<<vc1[0]<<endl; cout << vc1[0] << endl;
return 0; return 0;
} }
\ No newline at end of file
#include<iostream> #include <iostream>
using namespace std; using namespace std;
int main() { int main()
for (int i = 11; i < 35; i++) { {
for (int i = 11; i < 35; i++)
{
int i1 = i * i * i; int i1 = i * i * i;
int i2 = i * i1; int i2 = i * i1;
if ((i1 >= 1000 && i1 < 10000)&& (i2 >= 100000 && i2 < 1000000)) if ((i1 >= 1000 && i1 < 10000) && (i2 >= 100000 && i2 < 1000000))
cout << i << " " << i1 << " " << i2 << endl; cout << i << " " << i1 << " " << i2 << endl;
} }
return 0; return 0;
......
//代码3 //代码3
#include<iostream> #include <iostream>
#include<stdio.h> #include <stdio.h>
#include<string.h> #include <string.h>
#include<stdlib.h> #include <stdlib.h>
#include<algorithm> #include <algorithm>
using namespace std; using namespace std;
int ans[10005]; int ans[10005];
char str[100001]; char str[100001];
int main() int main()
{ {
int n; int n;
cin>>n; cin >> n;
int i,k=0; int i, k = 0;
getchar(); getchar();
for(i=0; i<n; i++) for (i = 0; i < n; i++)
{ {
gets(str); gets(str);
char *p; char *p;
p=strtok(str," "); p = strtok(str, " ");
ans[k++]=atoi(p); ans[k++] = atoi(p);
while(p) while (p)
{ {
p=strtok(NULL," "); p = strtok(NULL, " ");
if(p) if (p)
ans[k++]=atoi(p); ans[k++] = atoi(p);
} }
} }
sort(ans,ans+k); sort(ans, ans + k);
int ans1,ans2; int ans1, ans2;
for(i=0; i<k-1; i++) for (i = 0; i < k - 1; i++)
{ {
if(ans[i+1]-ans[i]==2) if (ans[i + 1] - ans[i] == 2)
{ {
ans1=ans[i]+1; ans1 = ans[i] + 1;
} }
if(ans[i+1]==ans[i]) if (ans[i + 1] == ans[i])
ans2=ans[i]; ans2 = ans[i];
} }
cout<<ans1<<" "<<ans2; cout << ans1 << " " << ans2;
} }
\ No newline at end of file
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
#include <iostream>
using namespace std;
int main()
{
int ans = 0;
for (int a = 1; a < 10; a++)
{
for (int b = 1; b < 10; b++)
{
if (b != a)
for (int c = 1; c < 10; c++)
{
if (c != b && c != a)
for (int d = 1; d < 10; d++)
{
if (d != c && d != b && d != a)
for (int e = 1; e < 10; e++)
{
if (e != d && e != c && e != b && e != a)
{
// ab*cde=adb*ce;
if ((a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b) * (c * 10 + e))
ans++;
}
}
}
}
}
}
cout << ans << endl;
return 0;
}
public class MAHUSUANSHI {
public static void main(String[] args) {
int ans = 0;
for (int a = 1; a < 10; a++) {
for (int b = 1; b < 10; b++) {
if (b != a)
for (int c = 1; c < 10; c++) {
if (c != a && c != b)
for (int d = 1; d < 10; d++) {
if (d != a && d != b && d != c)
for (int e = 1; e < 10; e++) {
if (e != a && e != b && e != c && e != d) {
if ((a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b)
* (c * 10 + e)) {
ans++;
System.out.printf(
"(d%*10+d%)*(d%*100+d%*10+d%)==(d%*100+d%*10+d%)*(d%*10+d%)==d%\n",
a, b, c, d, e, a, d, b, c, e,
(a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b)
* (c * 10 + e));
}
}
}
}
}
}
}
System.out.println(ans);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册